estoy usando algo como esto:Django, ModelChoiceField() y el valor inicial
field1 = forms.ModelChoiceField(queryset=...)
¿Cómo puedo hacer que mi forma de mostrar el valor como un seleccionado?
estoy usando algo como esto:Django, ModelChoiceField() y el valor inicial
field1 = forms.ModelChoiceField(queryset=...)
¿Cómo puedo hacer que mi forma de mostrar el valor como un seleccionado?
Si desea establecer el valor inicial predeterminado, debe definir initial
como otros campos de formulario excepto set it to the id instead.
Digamos que tienes field1
así:
class YourForm(forms.Form):
field1 = forms.ModelChoiceField(queryset = MyModel.objects.all())
continuación, debe configurar inicial cuando se crea el formulario de la siguiente manera:
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
en lugar de:
form = YourForm(initial = {'field1': instance_of_mymodel })
También estoy asumiendo que ha definido __unicode__
para sus modelos por lo que este disp establece correctamente
sólo puede utilizar
field1 = forms.ModelChoiceField(queryset=..., initial=0)
para hacer el primer valor seleccionado, etc. Es más de forma genérica, a continuación, la otra respuesta.
¿Para qué versión de Django funciona esto?No parece funcionar para mí en la versión 1.8. – BudgieInWA
He verificado a partir del [código fuente] (https://github.com/django/django/blob/1.8.11/django/forms/models.py#L1127-L1130) y lo compruebo yo mismo que esto está funcionando para 'django> = 1.8'. Creo que esto debería funcionar para todas las versiones, incluida '> = 1.4' – Yeo
Los tiempos han cambiado: valor inicial
El valor por defecto se puede ajustar ahora definiendo initial
al igual que otros campos de formulario excepto lo establece en la ID en lugar.
Ahora bien, esto será suficiente:
form = YourForm(initial = {'field1': instance_of_mymodel })
Aunque ambos siguen trabajando.
Especifique qué versión de Django está ejecutando ahora que los" tiempos han cambiado ". Cambiado para algunos puede haber una actualización a 1.2 ... – scoopseven
Usted puede hacer esto así:
form = YourForm(initial = {'field1': pk })
si está analizando su clave primaria a través de una cadena de consulta o mediante una llamada AJAX sin necesidad de una instancia, el conjunto de consultas ya se ha manejado que por su caída abajo, los índices pk el estado que desea
el código
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
y
form = YourForm(initial = {'field1': instance_of_mymodel })
o inicial de campo directamente siguiente:
field1 = forms.ModelChoiceField(queryset=..., initial=0)
Todo el trabajo.
Las dos primeras formas anularán la última.
No sé cuál era la versión en el momento de escribir esto, pero esta pregunta ahora está un poco desactualizada. En Django 1.5, al momento de escribir, ambos métodos funcionarían. – JcKelley
alguna idea de por qué me sale '__init __() tiene un argumento de palabra clave inesperado field1' – dashesy