Estoy tratando de establecer el campo en un cierto valor después de que se inicializa el formulario.
Por ejemplo, tengo la siguiente clase.
class CustomForm(forms.Form):
Email = forms.EmailField(min_length=1, max_length=200)
En la vista, quiero poder hacer algo como esto:
form = CustomForm()
form["Email"] = GetEmailString()
return HttpResponse(t.render(c))
ModelChoiceField
todavía me da invalid_choice cuando le doy uninitial
valor :(form.data['Email'] = GetEmailString()
y funcionaform.fields['Email'].initial = GetEmailString()
elform.fields['keyword'].initial
que da acceso a inicializar sus valores, incluso después de haber instanciado su formaSi ya ha inicializado el formulario, puede usar la propiedad inicial del campo. Por ejemplo,
fuente
Si desea hacerlo dentro del
__init__
método del formulario por alguna razón, puede manipular elinitial
dict:fuente
Algo como el de Nigel Cohen funcionaría si estuviera agregando datos a una copia del conjunto recopilado de datos del formulario:
fuente
data[form.add_prefix('Email')]
para tener en cuenta los casos en los que se establece un prefijo.form.data = form.data.copy()
modelform_factory
. De esta manera, puede generar una clase de formulario que no tiene los campos que no desea. Es muy peligroso tener una clase de formulario que tenga campos que no se representan, ya que el objeto de formulario aún aceptará datos para los campos no representados. Un atacante podría usar esto a su favor.Si ha inicializado el formulario así
entonces, la forma correcta a partir de enero de 2019 es usar
.initial
para reemplazar los datos. Esto reemplazará los datos en elintial
dict que acompaña al formulario. También funciona si se ha inicializado usando alguna instancia comoform = CustomForm(instance=instance)
Para reemplazar datos en el formulario, debe
Generalizando esto sería,
fuente
Simplemente cambie su campo Form.data:
fuente
Para lanzar otra forma en la mezcla: esto también funciona, con una notación un poco más moderna. Simplemente soluciona el hecho de que a
QueryDict
es inmutable.fuente
en widget use atributo 'valor'. Ejemplo:
fuente
Otra forma de hacer esto, si ya ha inicializado un formulario (con o sin datos), y necesita agregar más datos antes de mostrarlo:
fuente