2011-11-23 8 views
8

Anulo el método __init__ de mi formulario. puedo establecer el valor inicial de la siguiente manera:¿Cómo modifico el valor encuadernado para un campo en una forma encuadernada en django?

self.fields['fieldname'].initial = .... 

embargo, dado que está obligado, llamando a lo anterior no tiene ningún efecto. Intenté hacer esto:

self.fields['fieldname'].bound_data = .... 

pero esto no funciona. ¿Hay alguna manera de hacer esto?

+0

¿Por qué quiere modificar los datos encuadernados? –

+1

En general, estoy usando formwizard. Si la selección del formulario anterior ha cambiado; Quiero rellenar el siguiente formulario con nuevos datos. – canadadry

Respuesta

9

Se puede actualizar de forma data dict

self.data['fieldname'] = new_value 

bound_data es un método, no un atributo, por lo que no puede establecer el valor allí.

request.GET y request.POST son inmutables, a menos que cree un copy(). Puede hacer la copia en su método __init__ o antes de enlazar el formulario.

data = request.POST.copy() 
form = MyForm(data=data) 
+2

Intenté esto y arrojó el error: 'Esta instancia de QueryDict es inmutable' – canadadry

+1

Debe copiar el' QueryDict' y luego cambiar eso. He actualizado mi respuesta. – Alasdair

+0

Parece que 'self.data' también es inmutable. Hacer una copia de 'request.POST' como sugirió hace el truco sin embargo. – mgalgs

Cuestiones relacionadas