2009-08-26 23 views

Respuesta

71

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

+0

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

+0

alguna idea de por qué me sale '__init __() tiene un argumento de palabra clave inesperado field1' – dashesy

14

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.

+2

¿Para qué versión de Django funciona esto?No parece funcionar para mí en la versión 1.8. – BudgieInWA

+0

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

6

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.

+6

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

-1

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

1

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.

Cuestiones relacionadas