2009-03-08 17 views
9

Estoy trabajando en una aplicación de Django. Una de mis modelos, el "Usuario", incluye un campo "género", como se define a continuación:¿Cómo selecciono una opción del menú Django ModelForm por defecto?

GENDER_CHOICES = (
     ('M', 'Male'), 
     ('F', 'Female'), 
    ) 
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True) 

estoy usando un ModelForm para generar un formulario HTML "nuevo usuario". Mi Google-fu parece estar fallando. ¿Cómo puedo hacer que este formulario HTML tenga el elemento "Hombre" seleccionado de forma predeterminada en el cuadro desplegable? (es decir, selected="selected" para este artículo.)

Respuesta

15

Si necesita un formulario en blanco con un valor predeterminado seleccionado, a continuación, pasar un diccionario 'inicial' al constructor del formulario modelo usando el nombre de su campo como la clave:

form = MyModelForm (initial={'gender':'M'}) 

-O-

Puede anular ciertos atributos de un ModelForm utilizando la naturaleza declarativa de la API de formularios. Sin embargo, esto es probablemente un poco engorroso para este caso de uso y lo menciono solo para mostrarte que puedes hacerlo. Puede encontrar otros usos para esto en el futuro.

class MyModelForm (forms.ModelForm): 
    gender = forms.ChoiceField (choices=..., initial='M', ...) 
    class Meta: 
     model=MyModel 

-O-

Si quieres un ModelForm que está enlazado a un caso particular de su modelo, se puede pasar un 'ejemplo' de su modelo que causa Django para tirar del valor seleccionado a partir de ese modelo.

form = MyModelForm (instance=someinst) 
+0

De hecho acabo de descubrir que pasar una instancia del modelo como lo hizo en su respuesta no hace que Django muestre el valor seleccionado en HTML. Funciona muy bien para los campos de entrada de texto, pero también lo necesito para la entrada de selección. ¿Alguna idea de cómo evitar esto? – GChorn

+0

@GChorn Debería funcionar también para los campos seleccionados, por lo que puede haber algo más erróneo. Recomiendo crear una nueva pregunta y publicar el código correspondiente para que pueda ver más gente. –

+0

Hola Joe, gracias por la respuesta, sí, realmente hice esto ayer pero todavía no tengo respuestas: http://stackoverflow.com/q/16056045/1256700 – GChorn

7

Seguramente default hará el truco?

p. Ej.

gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default='M', null=True)
+0

+1; eso funcionó también; Gracias. – RexE

Cuestiones relacionadas