2009-03-22 9 views
4

Je suis en train de itérer form.fields dans un modèle et pour:django: form.fields pas itérer exemple des champs

{% for field in form.fields %} 
    {{ field }}, 
{% endfor %} 

Je reçois une liste des noms de champs ("nom, description. .. ") au lieu du code HTML qui est rendu lors de l'utilisation les suivants:

{{ form.name }}, {{ form.description }} 

(la sortie dans ce cas est la suivante:

id d'entrée < =" de id_name » type = "text" name = "nom" maxlength = "200"/> < entrée id = "id_description" ....

Des indices? Merci!

Répondre

10

Vous souhaitez effectuer une itération sur "formulaire", pas sur "formulaire.fields". Le dernier renvoie les instances de champ, le premier renvoie les instances de BoundField (même dans le cas d'un formulaire non lié), ce qui rend leur widget HTML. Les champs form.visible_fields et form.hidden_fields sont des méthodes utilitaires permettant d'obtenir uniquement les champs visibles/masqués du formulaire, mais ils renvoient également des instances BoundField. Ils ne sont en aucun cas parallèles à form.fields (je suis d'accord que ce n'est pas l'API la plus claire possible).

0

Les champs que vous obtenez sont des instances de django.forms.Field. Pour en obtenir la vue html, vous pouvez utiliser la fonction widget. {{field.widget}}

+0

{{field.widget}} renvoie également une chaîne vide. Trouvé la solution - voir ci-dessous – nivhab

2

L'itération de "form" au lieu de "form.fields" a résolu le problème. Je ne sais pas pourquoi que la documentation fournit également des exemples tels que:

{% for field in form.visible_fields %} 
... 

qui entraîne également des ensembles vides. A à voir avec le fait que ma forme n'est pas liée? pas sûr ...

Questions connexes