Ich habe Probleme, die Verwendung von ManyToMany-Modellfeldern mit einem Durchgangsmodell zu verstehen. Ich kann das gleiche ohne das ManyToMany Feld leicht erreichen. Die folgend von Django docs BerücksichtigungManyToMany-Felder in Django mit einem Durchgangsmodell verstehen
class Person(models.Model):
name = models.CharField(max_length=128)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
Was ich nicht verstehe, ist, wie wird mit dem ManyToMany Feld besser als einfach fallen zu lassen und die damit verbundenen Manager. Zum Beispiel ändern sich die beiden Modelle zu den folgenden:
class Group(models.Model):
name = models.CharField(max_length=128)
class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='members')
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
Was fehlt mir hier?
Ausgezeichnet danke. Es hängt also von der Präferenz ab, welche ich benutze? – Johan
@Johan: Das stimmt, es hängt nur davon ab, welche Art von Abfragen Sie ausführen möchten und wie Sie sie in der Sprache des ORM ausdrücken möchten. Persönlich tendiere ich dazu, das "ManyToManyField" hinzuzufügen, nur für den Fall, dass es immer bequem ist, diesen Manager zu verwenden. –
Darüber hinaus garantiert m2m Beziehung mit durchgarden die Einheitlichkeit der Beziehung. Im Frage-Beispiel verhindert nichts, 2 Mitgliedschaften mit gleichen Personen-/Gruppenreferenzen zu haben – Antwane