Wie schreibe ich ein Django-Modell mit ManyToMany-Beziehung mit dem Selbst durch ein Modell

8

Ich möchte ein Modell mit einer ManyToMany -Beziehung mit sich selbst haben, ich weiß nicht, wie ich das schreiben soll, aber ich versuche, etwas Code zu schreiben, um zu veranschaulichen, was ich tun möchte.

%Vor%

Mein Model, das die Freunde durchgehen sollen

%Vor%

In einem ManyToMany -Feld mit durch Beziehung , wenn der Name des anderen Modells beispielsweise "Pet" wäre, würde ich meine Felder in der Klasse person und pet benennen und sie machen Modelle. ForeignKey(Person) und Pet zum Beispiel

Was soll ich mein fields in meinem PersonFriends Modell für die beiden Personenfelder nennen, jetzt da es sich um das gleiche Modell handelt?

    
Joelbitar 07.10.2010, 09:53
quelle

4 Antworten

12

Sie können so etwas tun:

%Vor%     
Manoj Govindan 07.10.2010, 10:08
quelle
1
%Vor%

Dies ist aus der db-Tabellenstruktur einer ManyToMany-Beziehung zu self aus meiner Model-Struktur. Django definiert es so ..

    
FallenAngel 07.10.2010 10:05
quelle
1

Ohne anzunehmen, dass Freundschaften symmetrisch sind. Weil Buzz Lightyear Woodys Freund sein könnte, aber Woody ist bis kurz vor Ende des Films nicht mit Buzz Lightyear befreundet. Sie können beide Modelle vereinfachen und dennoch über sinnvolle Lookup-Namen verfügen. Sie müssen natürlich sicherstellen, dass Sie zwei PersonFriends definieren, wenn es eine gute Freundschaft ist.

%Vor%

Dies hat den zusätzlichen Bonus eines Kommentars für jede Richtung der Freundschaft. Tyrion denkt, dass Sansa ein reizendes und intelligentes, aber verlorenes Mädchen ist. Während Sansa denken könnte, dass Tyrion ein hässlicher, aber kluger und gutherziger Typ ist.

    
Will S 18.12.2014 11:30
quelle
0

Alles ist in den offiziellen Dokumenten von ManyToManyField beschrieben. through_fields (Sie können dort nach rekursiven Beziehungen suchen, um schnell zu finden, was Sie brauchen):

für django 1.11 müssen Sie durch und (!) through_fields Argumente angeben:

%Vor%     
Bob 01.07.2017 20:35
quelle