Je suis en train de créer un modèle pour le scénario suivant:modèles Django - créer des éléments qui doivent passer différentes tâches
Un élément est livré et doit passer par diverses tâches dans un certain ordre. Dès que l'élément a passé une tâche, la tâche est marquée comme terminée. Les noms des tâches sont connus à l'avance.
Par exemple:
- Créer un élément
- tâche 1 'inscrire l'élément'
- Tâche 2 'installer l'élément'
- Tâche 3 'vérifier les journaux de l'article'
J'ai commencé avec un modèle simple comme celui-ci, b J'ai l'air très statique et pas vraiment ce que je cherche.
models.py
class Item(models.Model):
item_id = models.PositiveIntegerField()
item_priority = models.PositiveSmallIntegerField(default=2)
item_date_created = models.DateField(auto_now_add=True)
task1_name = models.CharField(max_length=128)
task1_done_by = models.CharField(max_length=64, blank=True)
task1_done_date = models.DateField(null=True, blank=True)
task2_name = models.CharField(max_length=128)
task2_done_by = models.CharField(max_length=64, blank=True)
task2_done_date = models.DateField(null=True, blank=True)
# ... next 20 tasks
def __str__(self):
return str(self.item_id)
Essayer des champs relationnels, par exemple un ManyToMany terrain pour pré définir les tâches, j'ai fini avec ceci:
class Task(models.Model):
name = models.CharField(max_length=128)
done_by = models.CharField(max_length=64, blank=True)
done_date = models.DateField(null=True, blank=True)
class Item(models.Model):
item_id = models.PositiveIntegerField()
item_priority = models.PositiveSmallIntegerField(default=2)
item_date_created = models.DateField(auto_now_add=True)
tasks = models.ManyToManyField(Task)
Mais, si je crée deux éléments avec les mêmes tâches et marquer la tâche du premier élément comme fait il sera marqué comme fait dans le deuxième article aussi - ce n'est pas ce que je veux.
Comment affecter une tâche à un élément spécifique? Ou quel autre modèle conviendrait le mieux à mon scénario?
J'ai réglé ma question un peu pour clarifier mon problème: si je crée deux articles avec les mêmes tâches et marquer la tâche du premier élément comme fait, il sera marqué comme fait dans le deuxième article aussi - ce n'est pas ce que je veux et je cherche une solution à cela. –
L'élément class (models.Models) est un modèle pour un objet de base de données. Vous créez des instances à partir de celui-ci. Si vous liez une instance de tâche à deux instances d'élément et mettez à jour la tâche, il en sera de même pour les deux éléments qui s'y rattachent. Ce que vous devez faire est de créer task1 pour item1 et task2 pour item2. De cette façon, vous séparez les tâches. – rollinger
Je commence à comprendre. Je dois créer et lier de nouvelles tâches à chaque nouvel élément et je ne peux pas les réutiliser. Avez-vous un exemple de code pour créer et ajouter une tâche à la main? –