Forms: Dynamisch Felder hinzufügen
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:
1 2 3 4 5 6 7 8 9 10 | 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:
1 2 3 4 5 6 7 8 9 10 11 | >>> 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:
1 2 3 4 5 6 7 8 9 10 11 | 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:
1 2 3 4 5 6 7 8 9 10 11 | >>> 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> |
Geschrieben am: 29. Sept. 2008 um 11:41 Uhr, Abgelegt in Django & Python
Kommentare zu diesem Artikel (0):
Kommentar schreiben