2010-11-24 11 views
3

In meinem Modell, ich habe eine Klasse Zustand und zwei Unterklassen, StringCondition und NumCondition. Der Benutzer wird die Bedingungen als eine einzige Liste anzeigen/bearbeiten/bestellen.disparate Formen in einzelner Django Formset

Gibt es eine Möglichkeit, dies mit einem Django Modelform Formset zu implementieren? Ich benutze derzeit zwei separate Formsets (eins für NumConditions, eins für StringConditions), aber es ist ein Schmerz, die Reihenfolge manuell zu verweben (so kann eine Zahlenbedingung zwischen zwei String-Bedingungen auftreten, usw.).

Antwort

2

Ab Django 1.3 können Sie die __iter__()-Methode eines Formsets überschreiben, um die Reihenfolge zu steuern, in der die Formulare gerendert werden. Um diese Funktion zu verwenden, müssen Sie zwei Dinge tun: Markieren Sie zuerst Ihre Formulare, damit Sie sie bestellen können, und rendern Sie das Formularset als for form in formset (anstelle des alten for form in formset.forms). Dann erstellen Sie eine __iter__() Methode, um die Formulare zu bestellen & Sie sind im Geschäft.

Kent

+0

Vergessen Sie nicht, die [Indizierung override] (https://docs.djangoproject.com/en/dev/topics/forms/formsets/#formsets), wenn Sie das tun. (Aus den verknüpften Dokumenten -> Formsets kann auch indiziert werden, wodurch das entsprechende Formular zurückgegeben wird. Wenn Sie __iter__ überschreiben, müssen Sie auch __getitem__ überschreiben, um übereinstimmendes Verhalten zu erhalten.) – KobeJohn

Verwandte Themen