Ich möchte eine Beziehung zwischen einer Story-Klasse und einer Series-Klasse modellieren. (i.e. eine Trilogie von Romanen) Die Beziehung ist eine "eins zu viele" (eine Reihe kann viele Geschichten enthalten, aber eine Geschichte kann nur Teil einer Serie sein). Modell weise könnte dies einfach durch einen Fremdschlüssel auf Geschichte gelöst werden,Assoziationsattribute in einer Django-Eins-zu-Viele-Fremdschlüsselbeziehung
part_of = models.ForeignKey(Series , on_delete=models.CASCADE , related_name='contains_story')
Aber ich eine Sequenznummer als Attribut dieser Beziehung möchte. (1: Die lange Erde, 2: Der lange Krieg, 3: Der lange Mars, ...). Ich könnte es zu einem Attribut von Story machen, aber das ist nicht sauber, eine Story, die nicht Teil einer Serie ist, sollte keine Sequenznummer haben.
In einem "viele-zu-viele" kann dies mit der Option "durch" gelöst werden. durch Angabe einer Klasse und Hinzufügen von Attributen zu dieser Klasse.
part_of = models.ManyToManyField(Series, through='SeriesPart')
Aber „Teil einer Serie“ ist kein „many-to-many“ Beziehung und ich so modelliert es vermeiden wollen und es in Code zu beschränken hat, so wie soll ich das am besten lösen?
Ich bin mir nicht sicher über Ihren Anwendungsfall, aber klingt wie Fremdschlüssel ist der Weg, aber ich verstehe nicht, warum Sie keine Seriennummer auf "Story" haben wollen. –
es ist keine Seriennummer es ist seine Reihenfolge in einer Sequenz. Und eine Story, die nicht Teil einer Sequenz ist, sollte dieses Attribut nicht haben. – Chabu