Wie speichern Sie die Reihenfolge eines Django Inline Formsets?

8

In Django verwende ich ein Inline-Formular mit can_order = True für ein Modell mit order_with_respect_to set. Ich habe Drag & Drop am Frontend eingerichtet, was dazu führt, dass Djangos automatisch generierte ORDER-Formularfelder (die ich versteckt habe) sich entsprechend der neuen Reihenfolge ändern. Ich habe überprüft, dass ich die neue Bestellung korrekt auf dem Server anmelde, aber Django scheint sie zu ignorieren und speichert die Modelle in der ursprünglichen Reihenfolge. Die automatisch erstellten Felder _order in der Datenbank ändern sich nie.

Wie kann ich Django dazu bringen, die Modelle mit der im Formularsatz angegebenen Reihenfolge zu speichern? Muss ich etwas anderes tun, als save() auf dem Formset aufzurufen?

    
LS55321 22.07.2011, 21:23
quelle

2 Antworten

4

Die von Evan Borgstrom vorgeschlagene Lösung funktioniert nicht zusammen mit can_delete = True.

Hier ist meine Lösung, die auch mit can_delete = True funktioniert:

%Vor%     
sirex 07.12.2011 14:52
quelle
2

Ich hatte das gleiche Problem und dachte nach dem Durchstöbern der Django-Quelle, dass es etwas ist, das du selbst machen musst.

Meine ursprüngliche Implementierung sah ungefähr so ​​aus:

%Vor%

Wie Sie jedoch festgestellt haben, wird damit nicht der ORDER festgelegt. Also sieht meine Implementierung jetzt so aus:

%Vor%

In meinem obigen Beispiel ist 'order_order' das Feld, das ich verwende, um die Reihenfolge meiner Modelle zu verfolgen.

Denken Sie auch daran, dass Sie das Attribut 'ordering' der Meta-Klasse Ihres Modells angeben müssen, damit beim erneuten Generieren des Formsets die Elemente in der richtigen Reihenfolge angezeigt werden.

%Vor%     
Evan Borgstrom 03.08.2011 16:25
quelle