2010-12-15 98 views
0

Assez nouveau pour Django ici, donc je ne sais pas si je ne l'obtiens pas ou s'il s'agit d'un bug. Disons que j'ai une classe de formulaire:Le modèle Django ne peut pas accéder à un champ de formulaire s'il se trouve dans un tableau

class SurveyTwo(forms.Form): 
    food = [forms.BooleanField(required=False, initial=False, label="Seafood")] 

Ensuite, dans le modèle correspondant, je suis en train d'y accéder en tapant

{{ form.food.0 }} 

Quand je fais cela, je reçois sur ma page:

<django.forms.fields.BooleanField object at 0x1c5b990> 

Pas la case "Fruits de mer" que je cherchais. Je peux très bien accéder à l'étiquette en faisant {{form.food.0.label}} mais la case à cocher apparaît juste comme cette chaîne. Dois-je être capable de le faire ou pas? Essentiellement ce que j'essaie de faire est de passer un tableau de cases à cocher à mon modèle de formulaire, plutôt que de devoir définir chaque variable/champ de formulaire. Je veux le faire parce que je vais avoir un grand nombre de cases à cocher et que je veux pouvoir les mettre dans un certain ordre (avec un tableau 2D), plutôt que de les définir et de les mettre en forme manuellement. Si je ne peux pas faire ce qui précède, quelqu'un connaît-il une solution plus simple? Merci.

Mark

+0

Est-ce une chose que django vous ne dites pas { {forms.field [0]}} – verisimilidude

+0

Ouais dans les modèles (au moins à ma connaissance), vous devez accéder à un tableau avec un., soit .0, .1, .2. Comme je l'ai dit, {{form.food.0.label}} produira "Seafood". – marko

Répondre

1

Vous pouvez enregistrer simple, balise de modèle:

from django import template 
register = template.Library() 

@register.simple_tag 
def bound_field(form, name): 
    """ returns bound field """ 
    return form.__getitem__(name) 

Ensuite, dans le modèle que vous utilisez simplement:

{% bound_field form <field_name> %} 

où est le nom de champ. Si vous avez des champs générés dynamicly que les noms vous ne savez pas que vous pouvez y accéder via à fields.keys dans ce cas, générer tous les champs ressemblera

{% for name in form.fields.keys %} 
    {% bound_field form name %} 
{% endfor %}