Ich habe einen Webbericht, der ein Django-Formular (neue Formulare) für Felder verwendet, die die zum Generieren des Berichts verwendete Abfrage steuern (Startdatum, Enddatum, ...). Das Problem, das ich habe, ist, dass die Seite mit den Anfangswerten des Formulars funktionieren sollte (nicht gebunden), aber ich kann nicht auf das Feld cleaned_data zugreifen, wenn ich nicht is_valid() aufruft. Aber is_valid() schlägt bei ungebundenen Formularen immer fehl.So verwenden Sie Formularwerte aus einem ungebundenen Formular
Es scheint, als ob Djangos Formulare mit dem Anwendungsfall der Bearbeitung von Daten entworfen wurden, so dass ein ungebundenes Formular für nichts anderes als das Anzeigen von HTML wirklich nützlich ist.
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 dies ist ein GET (da es ungebunden ist), und wenn ich tun:
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 in form.cleaned_data aus, was kein gültiges Feld ist, weil is_valid() nicht aufgerufen wurde. Es scheint, als ob ich etwas zu tun haben, 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'])
, die es gibt, ist nicht eine gemeinsame Schnittstelle für die Form der Werte zwischen gebundener Form abzurufen und einem ungebundenen ein.
Wer sieht einen saubereren Weg, dies zu tun?
Ja, aber dann sind die Standardwerte nicht mit dem Formular definiert (wie bei initial = Wert in den Felddeklarationen). Wenn Sie das Formular an mehreren Stellen verwenden, müssen Sie Ihre Standardwerte wiederholen. – davidavr