Ich versuche, das Feld nach der Initialisierung des Formulars auf einen bestimmten Wert zu setzen.
Zum Beispiel habe ich die folgende Klasse.
class CustomForm(forms.Form):
Email = forms.EmailField(min_length=1, max_length=200)
Aus der Sicht möchte ich in der Lage sein, so etwas zu tun:
form = CustomForm()
form["Email"] = GetEmailString()
return HttpResponse(t.render(c))
ModelChoiceField
ich gebe immer noch invalid_choice, wenn ich ihm eineninitial
Wert gebe :(form.data['Email'] = GetEmailString()
und es funktioniertform.fields['Email'].initial = GetEmailString()
Mitform.fields['keyword'].initial
dieser Option können Sie Ihre Werte auch nach der Instanziierung Ihres Formulars initialisierenWenn Sie das Formular bereits initialisiert haben, können Sie die Eigenschaft initial des Felds verwenden. Beispielsweise,
quelle
Wenn Sie dies
__init__
aus irgendeinem Grund innerhalb der Methode des Formulars tun möchten , können Sie dasinitial
Diktat manipulieren :quelle
So etwas wie das von Nigel Cohen würde funktionieren, wenn Sie einer Kopie des gesammelten Satzes von Formulardaten Daten hinzufügen würden :
quelle
data[form.add_prefix('Email')]
Fälle berücksichtigen, in denen ein Präfix festgelegt ist.form.data = form.data.copy()
modelform_factory
. Auf diese Weise können Sie eine Formularklasse generieren, die nicht die Felder enthält, die Sie nicht möchten. Es ist sehr gefährlich, eine Formularklasse zu haben, deren Felder nicht gerendert werden, da das Formularobjekt weiterhin Daten für die nicht gerenderten Felder akzeptiert. Ein Angreifer könnte dies zu seinem Vorteil nutzen.Wenn Sie das Formular wie folgt initialisiert haben
dann ist der richtige Weg ab Januar 2019 ,
.initial
die Daten zu ersetzen. Dadurch werden die Daten imintial
Diktat ersetzt, die dem Formular beiliegen. Es funktioniert auch, wenn Sie mit einer Instanz wie zform = CustomForm(instance=instance)
Um Daten im Formular zu ersetzen, müssen Sie
Dies zu verallgemeinern wäre,
quelle
Ändern Sie einfach Ihr Feld Form.data:
quelle
Um noch einen anderen Weg in die Mischung zu werfen: Dies funktioniert auch mit einer etwas moderneren Notation. Es funktioniert nur um die Tatsache, dass a
QueryDict
unveränderlich ist.quelle
Verwenden Sie im Widget 'value' attr. Beispiel:
quelle
Eine andere Möglichkeit, dies zu tun, wenn Sie bereits ein Formular (mit oder ohne Daten) initialisiert haben und weitere Daten hinzufügen müssen, bevor Sie es anzeigen:
quelle