Ich verwende den Formularassistenten von Django für eine Umfrage, und ich möchte die gesamte Umfrage in einem einzigen Modell speichern. Ich habe das Modell in mehrere Formulare aufgeteilt, um eine Teilmenge des Modells in jedem FormWizard-Schritt zu haben. Die Frage ist, wie ich sie am Ende wieder zusammenführe. Meine models.py sieht wie folgt aus:
class BigSurvey(models.Model):
field1 = models.TextField()
field2 = models.TextField()
...
field40 = models.CharField(max_length=10)
und meine forms.py sieht folgendermaßen aus:
class FirstPageForm(ModelForm):
class Meta:
model = BigSurvey
fields = ('field1', 'field2')
class SecondPageForm(ModelForm):
class Meta:
model = BigSurvey
fields = ('field3', 'field4')
Und so weiter, für vier Formulare und insgesamt 30 Felder. Die Felder der einzelnen unterklassifizierten Modellformulare entsprechen zusammengenommen allen Feldern des BigSurvey-Modells.
Dies ermöglicht es mir, die BigSurvey in vier Schritte aufzuteilen. Der Formularassistent gibt ein Objekt form_list zurück, das eine Liste der vier Formulare ist (FirstPageForm, SecondPageForm usw.).
Wie kann ich diese vier Formulare in einem einzigen BigSurvey-Objekt zusammenfassen und speichern?
UPDATE: Gelöst durch Iteration über Formulare und Felder und Auffüllen eines neuen Formulars mit einem Wörterbuch von Werten. Die Befüllung mit setattr (wie in Colleens Antwort unten) führt zu einem ungebundenen Formular. Meine Arbeitslösung:
newvalues={}
for form in form_list:
for field in form.cleaned_data.keys():
newvalues[field]=form.cleaned_data[field]
newform = QuestForm(newvalues)
newform.save()