Formulare

Für Formulare aller Art verwende ich derzeit eine Kombination aus dem FormWizard und den "newforms"-Formularen und Formularfeldern. Diese Kombination eignet sich auch für Formulare mit nur einer Eingabemaske.

Die Verwendung des FormWizard ist relativ gut dokumentiert, sodass man zumindest für Standardfälle die notwendigen Informationen aus der Django-Dokumentation entnehmen kann.

Knifflig wird es dann, wenn man in diese Prozedur zwischen Wizard, den Formularen und den Feldern und Widgets eingreifen möchte. Das ist dann der Fall, wenn Formular-Felder dynamisch zur Laufzeit definiert werden sollen. Hierfür muss man die __call__-Methode des Wizards überschreiben. Innerhalb dieser kann man über "self.form_list" auf die übergebenen Formulare zugreifen und deren Felder mittels ihrem Attribute "base_fields", einem Dictionary, überschreiben.

Möchte man beispielsweise in der Praxis im 3. Formular das Feld "name" als CharField neu definieren, so kann man in der __call__-Methode des entsprechenden Wizards das Feld wie folgt überschreiben:

self.form_list[2].base_fields['name'] = forms.CharField(label='Name')

Tags: Django