Ich habe einen Webbericht, der ein Django-Formular (neue Formulare) für Felder verwendet, die die Abfrage steuern, die verwendet wird, um den Bericht zu generieren (Startdatum, Enddatum, ...). Das Problem, das ich habe, ist, dass die Seite mit den ursprünglichen Werten des Formulars (ungebunden) funktionieren sollte, aber ich kann nicht auf das Feld cleaned_data zugreifen, es sei denn, ich rufe is_valid()
. Aber is_valid()
schlägt bei ungebundenen Formularen immer fehl.
Es scheint, wie Django Formulare wurden mit dem Anwendungsfall der Bearbeitung von Daten, so dass eine ungebundene Form ist nicht wirklich nützlich für etwas anderes als die Anzeige von HTML konzipiert.
Zum Beispiel, wenn ich habe:
if request.method == 'GET':
form = MyForm()
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
is_valid() schlägt fehl, wenn es sich um einen GET handelt (da er nicht gebunden ist), und wenn ich:
if request.method == 'GET':
form = MyForm()
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
der erste Aufruf von do_query löst Ausnahmen für form.cleaned_data aus, das kein gültiges Feld ist, weil is_valid()
wurde nicht angerufen. Es scheint, als müsste ich etwas tun wie:
if request.method == 'GET':
form = MyForm()
do_query(form['start_date'].field.initial, form['end_date'].field.initial)
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
d.h. es gibt keine gemeinsame Schnittstelle für das Abrufen der Werte des Formulars zwischen einem gebundenen und einem ungebundenen Formular.
Sieht jemand eine sauberere Möglichkeit, dies zu tun?