2011-02-08 34 views
7

me hizo una forma Django simple, con una lista de opciones (en los botones de radio):Django - formulario de mensaje el selecto

class MyForm(forms.Form): 
      choices=forms.ChoiceField(widget=forms.RadioSelect(), choices=[(k,k) for k in ['one','two','three']],label="choose one") 

Me gustaría que el formulario para enviar automáticamente cuando un usuario selecciona una de las opciones . En HTML sencillo que hubiera hecho como

<select name='myselect' onChange="FORM_NAME.submit();"> 
    .... 
    </select> 

Pero no sé cómo integrar esto en la clase de formulario sin tener que escribir una plantilla. Específicamente, necesitaría saber FORM_NAME para poder llamar al FORM_NAME.submit() en el fragmento de arriba. ¿Se puede hacer sin usar una plantilla?

Respuesta

14

creo que no es necesario conocer el nombre del formulario. Esto debería funcionar así:

<select name='myselect' onChange="this.form.submit();"> 

Una solución rápida para integrar esto en su forma implicaría la adición de un attribute to your widget.

widget=forms.RadioSelect(attrs={'onchange': 'this.form.submit();'}) 

Ahora se podría decir si esto no se separa de su mejor definición de formulario (que separa definición, estilo y comportamiento), pero que debe hacerlo.

+2

Manejo de eventos en línea como un atributo de elemento? ¡Eso es una explosión del pasado! Si puede incluir jQuery y entenderlo, elegiría ese enfoque, que le permite soltar fácilmente el atributo onChange, a favor de vincular la acción de envío de formulario al evento de cambio de elemento de selección a través del documento jQuery "listo "evento. Esto se muestra mejor como: '$ (function() {. $ ('# Id_myselect') cambio (function() {this.form.submit();})});' – trojjer

+0

Posteriormente, se podría eliminar el "onchange" atributo del elemento HTML (con ID) se vería así: