2009-12-16 4 views
5

django-smart-selects est une solution élégante qui permet aux développeurs Django d'avoir des entrées de sélection chaînées dans leurs formulaires. Mais tel que rapporté par les développeurs dans sa liste de problèmes, il ne fonctionne pas bien lorsqu'il est utilisé dans des formsets.chaîne de django sélectionnez

Le javascript affiché est lié à l'ID du "champ chaîné" directement dans la définition du modèle.

Comment pensez-vous que cela peut être fait fonctionner lorsqu'il est utilisé dans des formsets? Je pense que la méthode de rendu du widget (s'il vous plaît voir le code django-smart-selects) doit en quelque sorte être mis au courant des formsets (et idéalement, former des préfixes). Mais comment?

+0

Eh bien, pour le faire fonctionner avec des formsets, j'ai l'intention de rendre les formes/formsets et le javascript requis manuellement. Je cherche juste quelques conseils sur la façon d'accomplir cela. – gbsmith

Répondre

4

J'ai essayé et il fonctionne --- Dans les widgets. py fichier du code django-smart-selects, il suffit de copier la section qui traite du rendu javascript et de le supprimer du fichier. Supprimez la ligne qui concatène ce javascript (maintenant supprimé) à la sortie.

Pour vos formsets, effectuez le rendu complet vous-même. C'est-à-dire, dans votre modèle ne faites pas simplement {{form}} ou {{formset}} ou autre, mais disposez explicitement tous les champs individuels en faisant {{form.field}} dans un {% pour former dans formset. forms%} boucle.

Collez le code javascript que vous avez copié au-dessus de widgets.py et le personnaliser avec les ID dans le javascript avec {{}} form.field.html_name

Ecrire dans vos urls personnalisés dans le javascript, suivant le motif dans le code.

Voila!

+0

Le seul problème était que le javascript n'obtenait pas les ID correctement. Votre «solution» consiste à retirer beaucoup de magie automatique et à résoudre le problème principal. Bon. Je suppose que le vrai bijou ici est le {{form.field.html_name}}. – gbsmith

0

assurez-vous d'utiliser le nom/id du formset/index dans l'ID d'élément qui est utilisé par javascript, cette façon, ils seront toujours uniques

+0

C'est exactement le problème. – gbsmith

Questions connexes