je les modèles Django suivants: -Besoin d'aide à la conception de modèle Django, ManyToManyField « à travers » un modèle intermédiaire et ses implications pour l'unicité
class Company(models.Model):
name = models.CharField(max_length=50)
is_active = models.BooleanField(db_index=True)
class Phase(models.Model):
company = models.ForeignKey(Company)
name = models.CharField(max_length=50)
is_active = models.BooleanField(db_index=True)
class Process(models.Model):
company = models.ForeignKey(Company)
name = models.CharField(max_length=50)
phases = models.ManyToManyField(Phase, through='ProcessPhase')
is_active = models.BooleanField(db_index=True)
class ProcessPhase(models.Model):
process = models.ForeignKey(Process)
phase = models.ForeignKey(Phase)
order = models.PositiveIntegerField(help_text="At what step of your process will this phase occur?", unique=True)
Une « société » a ses « processus » et « phases » . Un processus (d'une entreprise) est composé d'une ou plusieurs phases (de l'entreprise). Chaque phase associée à un processus a un "ordre". L'exigence est que: -
- dans un processus particulier d'une entreprise, une phase ne peut apparaître qu'une seule fois;
- également "phase A" et "phase B" dans un processus ne peut pas avoir le même ordre.
donc je dois savoir: -
a) comment spécifier certains de « uniques » dans la définition du modèle pour répondre aux exigences ci-dessus;
b) quel caractère unique, le cas échéant, est automatiquement impliqué par un objet ManyToManyField?
J'ai cette structure plus tôt. Mais du point de vue des utilisateurs, ils créent des processus et des phases. Les phases sont similaires dans chaque processus, mais leur ordre peut être différent dans différents processus. – chefsmart
Ensuite, vous n'avez pas besoin du champ ManyToMany défini, juste un tableau supplémentaire. Vérifiez ma dernière modification. L'unicité est garantie avec unique_together dans Meta. – kender
S'il y a un projet "A" et un projet "B" qui ont tous deux une phase "d'installation", est-ce une phase d'installation partagée entre les projets ou deux phases d'installation, une pour chaque projet? Je dirais que c'est probablement deux, car "A.setup" pourrait être actif quand "B.setup" ne l'est pas. Juste dire que certains "setup" est actif n'est probablement pas très significatif? Si oui, je pense que Kender a la bonne réponse. –