Django: Mehrere Formulare bei Verwendung von FormView möglich?

8

Ich habe kürzlich Django-Formulare gelernt, indem ich FormView abgeleitet habe, wobei die gewünschte Form dem FormView.form_class -Attribut zugewiesen wurde. Wenn das Formular validiert wird, wird die Methode form_valid() aufgerufen (für dieses eine Formular). Zum Beispiel:

%Vor%

Allerdings habe ich jetzt eine Situation, in der ich drei eindeutige Formulare auf einer Seite brauche (mit nur einem Formular, das für den Benutzer gleichzeitig sichtbar ist). Also, ich möchte sie alle in der gleichen Ansicht behandeln.

Sind mehrseitige Seiten mit FormView möglich? Ich bin mir nicht sicher, wie ich damit umgehen soll, sowohl was die Übergabe mehrerer Formulare an das View anbelangt (z. B. das andere UpdateAccountForm- und UpdateBillingForm-Formular), als auch die Unterscheidung zwischen dem gesendeten und validierten Formular. Was wäre der beste Weg?

    
pete 21.01.2014, 19:54
quelle

2 Antworten

11

Nun, für das, was es wert ist, hier ist, was letztlich für mich funktionierte, mit einem generischen View.

1) Ich habe jedem einzelnen Formular auf der Seite ein verstecktes Eingabefeld ("Aktion") hinzugefügt. Dies ist beispielsweise das Formular zum Aktualisieren von Benutzerinformationen, das UserForm einzieht:

%Vor%

2) In meiner View-Logik kann ich die Formulare durch Anwenden eines Präfixes unterscheiden (für andere SO-Posts und Django Dokumente ). Dann binde ich abhängig von der eingehenden 'Aktion' nur das anwendbare Formular an die POST-Anfrage (so werden Validierungen nicht auf alle angewendet). In meinem Fall hatte ich zwei Formulare in forms.py, UserForm und BillingForm definiert:

%Vor%

Scheint gut zu funktionieren, hoffentlich ist das der richtige Ansatz (?)

    
pete 22.01.2014 00:06
quelle
0

Sie können eine einfache Python-Klasse schreiben, die die Form API nachahmt (zumindest die nützlichen Teile) und Ihre drei Formulare umschließt. Zu erkennen, welches Formular gesendet wurde, ist nur eine Frage des Hinzufügens einer versteckten Eingabe mit der Kennung des Formulars in jedem Formular (Hinweis: Verwenden Sie Präfixe für Ihre Formulare und verwenden Sie dieses Präfix als Bezeichner).

Die andere Lösung besteht darin, stattdessen eine einfache funktionsbasierte Ansicht zu verwenden, aber selbst dort würde ich immer noch dasselbe "Formular-Wrapper" -Muster verwenden, soweit es mich betrifft.

    
bruno desthuilliers 21.01.2014 20:39
quelle

Tags und Links