Dans Django, je les modèles suivants:Database Design: commander plusieurs-à-plusieurs
class Pink(models.Model):
...
class White(models.Model):
...
pinks = models.ManyToManyField(Pink)
...
À un moment donné, je devais définir un ordre de Pinks
dans un White
(afin d'avoir White1.pinks: P1, P2, P3
au lieu d'un White1.pinks: P2, P3, P1
aléatoire), donc j'ai créé
class PinkInWhite(models.Model):
pink = models.ForeignKey(Pink)
white = models.ForeignKey(White)
position = models.PositiveIntegerField("pink's position inside this white")
class Meta:
ordering = ['white','position']
Question 1: est-ce la meilleure solution?
Question 2: Ceci est évidemment redondant: Il me reste un champ pinks
dans mon modèle White
, parce que je besoin dans d'autres situations qui ne nécessitent pas une commande. Puis-je le conserver, ou est-il préférable de l'enlever, et toujours utiliser le modèle de relation PinkInWhite
à la place?
(noms de modèles sont fictifs. Pour simplifier la question que je n'ai pas utilisé les vrais noms de modèle, et parler de M. X et M. Y ne contribueraient pas à la lisibilité ...)
Si vous utilisez une table de jonction/table de jonction, la façon dont elle est implémentée dans Django est connue sous le nom de modèle Through - voir http://docs.djangoproject.com/en/dev/topics/db/models/ # extra-fields-on-many-to-many-relations –