Wie man ein Django-Formular manuell testen kann
Mit etwas Handarbeit kann man oft leichter herausbekommen, warum ein Django-Formular zickt und was da im Hintergrund passiert.
myapp.formsoderMyFormvonmyapp.formsimportieren.-
Wenn es ein ModelForm ist:
myform = MyForm(instance=some_obj)
aufrufen, ggf. mit
initial=dict(…).Wenn es kein ModelForm ist, ohne das
instance-Argument. -
Aus dem Formular die Daten auslesen, die im Template als HTML-
<form>gerendert würden:post_data = {vf.name: vf.initial for vf in myform.visible_fields()} post_data.update({vf.name: vf.initial for vf in myform.hidden_fields()})(Die zweite Zeile kann entfallen, wenn es keine hidden fields gibt.)
Ggf.
post_dataverändern, um eine Eingabe zu simulieren. (Erforderliche Felder setzen!)-
Damit ein gebundenes Formular erzeugen:
b_myform = MyForm(post_data) b_myform.is_valid()
Wenn
is_valid()False liefert, können mitb_myform.errorsdie Fehler angezeigt werden. -
Bei einem ModelForm kann das zugehörige Objekt mit
b_myform.save()gesichert werden. Will man nicht direkt in die Datenbank schreiben, kann stattdessenobj = b_myform.save(commit=False)
aufgerufen und
objinspiziert werden. Will man es dann doch in die Datenbank bringen, macht man dies mitobj.save() b_myform.save_m2m()
(Das letztere Kommando bewirkt nur etwas, wenn das Model ManyToMany-Felder enthält.)