Django champ de formulaire de regroupement
Dire que j'ai un formulaire avec 20 champs, et j'ai envie de mettre 10 de ces champs (groupe1) dans un div de l'environnement et les 10 autres champs (groupe2) dans un autre div environnement. Quelque chose comme:
<div class="class1">
{% for field in form.group1 %}
{{ field.label}}: {{ field }}
{% endfor %}
</div>
<div class="class2">
{% for field in form.group2 %}
{{ field.label}}: {{ field }}
{% endfor %}
</div>
Aucune idées de comment je pourrais accomplir cela en une itération sur les champs? Plus généralement, je voudrais être en mesure de le faire avec beaucoup de différents div environnements et des ensembles de champs de formulaire.
OriginalL'auteur C. Reed | 2012-04-28
Vous devez vous connecter pour publier un commentaire.
Toute logique de regrouper les champs de travail... disons que vous avez une méthode sur votre formulaire qui renvoie les champs de formulaire que vous avez explicitement le groupe?
Pour enregistrer de frappe, peut-être un certain champ préfixe schéma de nommage?
Peut-être un attribut sur le terrain, vous pouvez filtrer par?
Vous pouvez également utiliser les regrouper tag si vous définir ces attributs.
Remarque: votre première solution n'a pas assez de travail pour passer en boucle sur les champs dans le modèle --- utiliser le
yield
mot-clé pour créer un générateur pour obtenir les champs (voir mon post ci-dessous) et d'émuler de django reinhardt, typique de l'itérationvous avez raison, j'ai oublié de retour BoundFields. Mis à jour. Merci pour remarquer!
J'ai essayé de les regrouper approche, mais n'a pas réussi. le problème est que le nouveau groupe de l'attribut n'existe pas pour la balise de champ -, mais de la "le terrain.le champ" tag - qui fait référence à la sous-jacentes python classe. Est il possible que je peux regrouper par ces classes sous-jacentes' attribut?
Quelle serait votre approche dans le cas où vous un
ModelForm
au lieu deForm
? Dans ce cas, nous avons l'habitude de ne pas redéfinir les champs à l'intérieur de la classe de formulaire. Eh bien, je suppose que la solution plus simple serait de déposer leModelForm
en faveur deForm
après tout... non?OriginalL'auteur Yuji 'Tomita' Tomita
Ici est pertinente DONC, la question: Django et des balises html fieldsets sur Modelform, même si cela semble un peu overkill pour ce que je cherche à accomplir. Aussi, voici un possible hack, même si je suis curieux de savoir comment Django experts de résoudre ce problème.
(0) Définir un python fieldset objet qui est itératif afin de pouvoir avancer dans un django template:
(1) Dans l'affichage utilisation:
(2) dans le modèle n':
Noter qu'il est possible de remplacer le
fieldset
balise avec undiv
balise pour répondre à mes question spécifique.+++ Beaucoup de cette réponse, extraite de cet article de blog par Michael Kowalchik. +++
yield self.form[name]
est suffisant. (J'ai eu des problèmes pour importer des BoundField mais avec cette ligne, il n'est même pas nécessaire.)OriginalL'auteur C. Reed
J'ai finalement été en mesure d'apporter @Yuji'Tomita'Tomitas regrouper-modèle-tag-solution de travail (voir les commentaires de @Yuji'Tomita'Tomitas répondre à comprendre les difficultés). Je pense que c'est vraiment une belle et facile à perfom regroupement de champs!
La solution était de regrouper via
group
attribut de champ accéder à lafield
attribut retournéBoundFields
. Exemple Minimal:Dans forms.py :
Modèle:
OriginalL'auteur Henhuy