Forms: Dynamisch Felder hinzufügen
Geschrieben 3 Monate, 1 Woche zuvor
Kurzer und schmerzloser Tipp für zwischendurch: Wie kann man in einem
NewForms-Formular dynamisch Felder hinzufügen?
Abstraktion
Am einfachsten per Abstraktion. Das Formular mit den weiteren Feldern leitet sich einfach vom Basisformular ab:
from django import forms class Userform(forms.Form): username = forms.CharField() passwort = forms.CharField(widget=forms.PasswordInput(render_value=False)) class UserformKontaktdaten(Userform): # ^ Abgeleitet von Userform vorname = forms.CharField() nachname = forms.CharField()
Ausgabe:
>>> f = Userform() >>> print f.as_ul() <li><label for="id_username">Username:</label> <input type="text" name="username" id="id_username" /></li> <li><label for="id_passwort">Passwort:</label> <input type="password" name="passwort" id="id_passwort" /></li> >>> f = UserformKontaktdaten() >>> print f.as_ul() <li><label for="id_username">Username:</label> <input type="text" name="username" id="id_username" /></li> <li><label for="id_passwort">Passwort:</label> <input type="password" name="passwort" id="id_passwort" /></li> <li><label for="id_vorname">Vorname:</label> <input type="text" name="vorname" id="id_vorname" /></li> <li><label for="id_nachname">Nachname:</label> <input type="text" name="nachname" id="id_nachname" /></li>
Laufzeitabhängig
Möchte man die Felder aber schon während der Formulargenerierung dynamisch hinzufügen, überschreibt man einfacherweise den Konstruktor und legt die fügt die neuen Felder zu den bestehenden hinzu:
class Userform(forms.Form): username = forms.CharField() passwort = forms.CharField(widget=forms.PasswordInput(render_value=False)) def __init__(self, kontaktdaten=False, *args, **kwargs): super(Userform, self).__init__(*args, **kwargs) # Hier dynamisch Felder hinzufuegen if kontaktdaten: self.fields['vorname'] = forms.CharField() self.fields['nachname'] = forms.CharField()
Ausgabe:
>>> f = Userform() >>> print f.as_ul() <li><label for="id_username">Username:</label> <input type="text" name="username" id="id_username" /></li> <li><label for="id_passwort">Passwort:</label> <input type="password" name="passwort" id="id_passwort" /></li> >>> f = Userform(kontaktdaten=True) >>> print f.as_ul() <li><label for="id_username">Username:</label> <input type="text" name="username" id="id_username" /></li> <li><label for="id_passwort">Passwort:</label> <input type="password" name="passwort" id="id_passwort" /></li> <li><label for="id_vorname">Vorname:</label> <input type="text" name="vorname" id="id_vorname" /></li> <li><label for="id_nachname">Nachname:</label> <input type="text" name="nachname" id="id_nachname" /></li>
Bisher wurde noch kein Kommentar hinterlassen.
Keine neuen Kommentare für diesen Beitrag mehr möglich.







