2009-11-11 10 views
8

Ich habe ein großes Django-Modell (73 Felder), die mit einem ModelForm verbunden werden. Ich möchte eine Kombination der Funktionen verwenden, die für die Contrib-Apps "Formular-Assistent" und "Formularvorschau" gefunden wurden.Django Formular-Assistent und Vorschau mit ModelForm

D. h., Die Formularfelder würden über mehrere Seiten verteilt sein, und der Benutzer hätte die Möglichkeit, die Daten zu überprüfen/zu prüfen, bevor die Modellinstanz erzeugt wird.

Gibt es Best Practices für diese Art von Sache oder Beispielcode?

+1

Es ist keine Antwort wert, aber trotzdem: Es kann problematisch sein FormWizard für etwas über banalsten Dinge zu verwenden (bei zumindest war es für mich). Hier ist eine Sache - Sie können nicht kontrollieren, was an das Formular "__init__" übergeben wird (neben den anfänglichen Werten). Wie also werden Sie ein "Instanz" -Schlüsselwort-Argument für das Formular "__init__" liefern? Natürlich gibt es Wege, die ich zum Beispiel gelöst habe, indem ich eine innere Klasse deklariert habe, die von der notwendigen ModelForm erbt und "__init__" überschreibt. Dann müssen Sie diese Klasse einem Element von .form_list zuweisen. Nicht sehr offensichtlich ... – shylent

+1

... und Sie müssen sich mit solchen Dingen beschäftigen, wenn Sie FormWizard verwenden. Ich sage nicht, dass FormWizard schlecht ist, aber es ist sicherlich nicht sehr einfach zu benutzen. Und 73 Felder? Ich weiß, das klingt vielleicht doof, aber vielleicht gibt es einen Weg, die Aufgabe zu vereinfachen, indem man sie in eine Reihe kleinerer Aufgaben aufteilt. Wie Umstrukturieren Sie Ihre Modelle und behandeln Sie getrennt mit jedem von ihnen oder etwas? – shylent

+0

Danke für die Rückmeldung, shylent. glaube es oder nicht die 73 Felder _ist_ vereinfacht. Es sind nur viele Daten, die wir sammeln müssen. :-) –

Antwort

1

Ich mache eine ähnliche Sache bei meinem ersten Django-Projekt. Mit dem sitzungsbasierten FormWizard habe ich ihn so angepasst, dass der Benutzer das Submittieren von Daten in jeder Form stoppen kann.

An diesem Punkt können Sie FormPreview wahrscheinlich verwenden, um Informationen anzuzeigen oder nur dynamisch generieren und dem Benutzer anzeigen. Daten bleiben in der Sitzung.

0

Sie können das gesamte Wörterbuch auf den Kontext übergeben und dann in der Vorlage zugreifen:

# views.py 
def get_context_data(self, **kwargs): 
    context = super(MyWizard, self).get_context_data(**kwargs) 
    context['all_data'] = self.get_all_cleaned_data() 
    return context 

# template.html 
{{ all_data }}