Solución:
Intente establecer el valor inicial cuando cree una instancia del formulario:
form = MyForm(initial={'max_number': '3'})
Esto no toca la pregunta inmediata en cuestión, pero esta Q / A surge para búsquedas relacionadas con tratar de asignar el valor seleccionado a un ChoiceField
.
Si ya has llamado super().__init__
en su clase de formulario, debe actualizar el form.initial
diccionario, no el field.initial
propiedad. Si tú estudias form.initial
(p.ej print self.initial
después de la llamada a super().__init__
), contendrá valores para todos los campos. Tener un valor de None
en ese dict anulará el field.initial
valor.
p.ej
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
# assign a (computed, I assume) default value to the choice field
self.initial['choices_field_name'] = 'default value'
# you should NOT do this:
self.fields['choices_field_name'].initial="default value"
También puede hacer lo siguiente. en tu formulario class def:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial="3", required = True,)
luego, al llamar al formulario en su vista, puede establecer dinámicamente tanto las opciones iniciales como la lista de opciones.
yourFormInstance = YourFormClass()
yourFormInstance.fields['max_number'].choices = [(1,1),(2,2),(3,3)]
yourFormInstance.fields['max_number'].initial = [1]
Nota: los valores iniciales deben ser una lista y las opciones deben ser 2 tuplas, en mi ejemplo anterior tengo una lista de 2 tuplas. Espero que esto ayude.