Estou tentando definir o campo para um determinado valor depois que o formulário é inicializado.
Por exemplo, tenho a seguinte aula.
class CustomForm(forms.Form):
Email = forms.EmailField(min_length=1, max_length=200)
Na visualização, quero ser capaz de fazer algo assim:
form = CustomForm()
form["Email"] = GetEmailString()
return HttpResponse(t.render(c))
ModelChoiceField
ainda estou fornecendo invalid_choice quandoinitial
form.data['Email'] = GetEmailString()
e funcionaform.fields['Email'].initial = GetEmailString()
Oform.fields['keyword'].initial
dá acesso para inicializar seus valores mesmo depois de ter instanciado seu formulárioSe você já inicializou o formulário, pode usar a propriedade inicial do campo. Por exemplo,
fonte
Se quiser fazer isso dentro do
__init__
método do formulário por algum motivo, você pode manipular oinitial
dict:fonte
Algo como o de Nigel Cohen funcionaria se você estivesse adicionando dados a uma cópia do conjunto coletado de dados do formulário:
fonte
data[form.add_prefix('Email')]
considerar os casos em que um prefixo é definido.form.data = form.data.copy()
modelform_factory
. Desta forma, você pode gerar uma classe Form que não possui os campos que você não deseja. É muito perigoso ter uma classe Form que tem campos que não são renderizados, pois o objeto de formulário ainda aceitará dados para os campos não renderizados. Um invasor pode usar isso a seu favor.Se você inicializou o formulário assim
então, a maneira correta a partir de janeiro de 2019 é usar
.initial
para substituir os dados. Isso substituirá os dados nointial
dicionário que acompanha o formulário. Também funciona se você inicializou usando alguma instância, comoform = CustomForm(instance=instance)
Para substituir os dados no formulário, você precisa
Generalizando isso seria,
fonte
Basta alterar o campo Form.data:
fonte
Para lançar mais um caminho na mistura: isso também funciona, com uma notação um pouco mais moderna. Ele apenas contorna o fato de que a
QueryDict
é imutável.fonte
no widget, use 'valor' attr. Exemplo:
fonte
Outra maneira de fazer isso, se você já inicializou um formulário (com ou sem dados) e precisa adicionar mais dados antes de exibi-lo:
fonte