Próbuję ustawić pole na określoną wartość po zainicjowaniu formularza.
Na przykład mam następującą klasę.
class CustomForm(forms.Form):
Email = forms.EmailField(min_length=1, max_length=200)
W widoku chcę móc zrobić coś takiego:
form = CustomForm()
form["Email"] = GetEmailString()
return HttpResponse(t.render(c))
ModelChoiceField
nadal daje invalid_choice, kiedyinitial
form.data['Email'] = GetEmailString()
i działaform.fields['Email'].initial = GetEmailString()
form.fields['keyword'].initial
Jeśli formularz został już zainicjowany, możesz użyć początkowej właściwości pola. Na przykład,
źródło
Jeśli
__init__
z jakiegoś powodu chcesz to zrobić w ramach metody formularza , możesz manipulowaćinitial
dyktowaniem:źródło
Coś w rodzaju Nigela Cohena zadziałałoby, gdybyś dodawał dane do kopii zebranego zestawu danych formularza:
źródło
data[form.add_prefix('Email')]
aby uwzględnić przypadki, w których ustawiono prefiks.form.data = form.data.copy()
modelform_factory
. W ten sposób możesz wygenerować klasę Form, która nie ma pól, których nie chcesz. Bardzo niebezpieczne jest posiadanie klasy Form, która zawiera pola, które nie są renderowane, ponieważ obiekt formularza nadal będzie akceptował dane dla pól niewyrenderowanych. Atakujący może to wykorzystać na swoją korzyść.Jeśli zainicjowałeś formularz w ten sposób
to prawidłowy sposób od stycznia 2019 r. polega na użyciu
.initial
do zastąpienia danych. Spowoduje to zastąpienie danych wintial
dictwie, które są zgodne z formularzem. Działa również, jeśli zainicjowałeś przy użyciu jakiejś instancji, takiej jakform = CustomForm(instance=instance)
Aby zamienić dane w formularzu, musisz
Uogólniając to byłoby,
źródło
Po prostu zmień swoje pole Form.data:
źródło
Aby rzucić jeszcze jedną drogę do miksu: to też działa, z nieco nowocześniejszą notacją. Po prostu działa wokół faktu, że a
QueryDict
jest niezmienny.źródło
w widgecie użyj atr. „wartość”. Przykład:
źródło
Możesz to zrobić w inny sposób, jeśli już zainicjowałeś formularz (z danymi lub bez) i musisz dodać dalsze dane przed jego wyświetleniem:
źródło