2009-12-16 14 views
5

django-smart-selects es una solución elegante que permite a los desarrolladores de Django tener entradas seleccionadas encadenadas en sus formularios. Pero según lo informado por los desarrolladores en su lista de problemas, no funciona bien cuando se usa en formsets.django chain select

El javascript que representa está vinculado al id del "campo encadenado" en la definición del modelo.

¿Cómo crees que se puede hacer que funcione cuando se usa en formsets? Creo que el método de renderizado del widget (consulte el código django-smart-selects) necesita conocer de algún modo los conjuntos de formularios (e idealmente, los prefijos de formulario). ¿Pero cómo?

+0

Bueno, para que funcione con formssets, planeo renderizar formularios/formularios y el javascript requerido manualmente. Solo estoy buscando algunos consejos sobre cómo lograr eso. – gbsmith

Respuesta

4

He intentado esto y funciona --- En los widgets. archivo py del código django-smart-selects, simplemente copie la sección que trata sobre la representación de javascript y elimínelo del archivo. Elimine la línea que concatena este javascript (ahora eliminado) en la salida.

Para sus conjuntos de formularios, hágalo usted mismo. Es decir, en su plantilla, no solo haga {{form}} o {{formset}} o lo que sea, sino explícitamente diseñe todos los campos individuales haciendo {{form.field}} en un {% for form in formset. forma%} loop.

pegue el código Javascript que ha copiado desde widgets.py y personalizarlo con los ID en el código JavaScript con {{}} form.field.html_name

Escribir en sus propias direcciones URL personalizadas en el código JavaScript, siguiendo el patrón en el código.

Voila!

+0

El único problema era que el javascript no estaba recibiendo los ID correctamente. Su "solución" implica extraer una gran cantidad de auto-magia y aborda el problema central. Buena persona Supongo que la verdadera joya aquí es {{form.field.html_name}}. – gbsmith

0

asegúrese de utilizar el juego de formularios de nombre/id/índice en el ID de elemento que se utiliza por el javascript, de esa manera que todavía estará única

+0

Ese es exactamente el problema. – gbsmith