2011-07-10 4 views
1

après avoir essayé pendant des heures, je suis frustré par cela. Je ne peux simplement pas boucler les choix de mon choix dans le modèle. Il ne va même pas entrer dans la boucle. Mais si j'accède au champ de formulaire avec pdb ça a l'air bien.Django ChoiceField: Impossible d'accéder aux choix dans le modèle

ma forme:

MODE_CHOICES = (('blue', 'blue'), ('red', 'red')) 

class MultiSearchForm(forms.Form): 
    mode = forms.ChoiceField(required = True, widget = RadioSelect, choices = MODE_CHOICES) 

mon avis:

class LandingPage(TemplateView): 
    template_name = "landingPage.html" 

    def get_context_data(self, **kwargs): 
     context = super(LandingPage, self).get_context_data(**kwargs) 
     context.update({ 
      'searchForm': MultiSearchForm(), 
     }) 

     return context 

mon modèle:

<ul> 

{% for choice in searchForm.mode.choices %} // for loop is not entered 
    <li> 
    <input type="radio" name="mode" value="{{choice.0}}" 
     {% ifequal searchForm.mode.data choice.0 %} 
     checked="checked" 
     {% endifequal %}/> 
    </li> 
{% endfor %} 
</ul 

{{searchForm.mode.choices.0}} //no output 

{{searchForm.mode}} // gives me 2 radio buttons 

Répondre

0

Pourquoi fais-tu comme ça? Vous devriez laisser le champ sortir lui-même, y compris le champ sélectionné. Si vous devez définir l'un des choix à choisir, vous devriez le faire dans la vue ou la forme, avec le paramètre initial:

context.update({ 
     'searchForm': MultiSearchForm(initial={'mode': your_choice}), 
    }) 
+0

Hm, j'ai besoin pour personnaliser l'apparence des boutons radio, il est pas une valeur initiale. – user234324

1

De la documentation Django (https://docs.djangoproject.com/en/dev/ref/forms/widgets/):

Nouveauté Django 1.4 - Pour un contrôle plus précis du balisage généré, vous pouvez passer en boucle sur les boutons radio du gabarit. En supposant une forme myform avec un beatles champ qui utilise un RadioSelect comme widget:

{% for radio in myform.beatles %} 
    <div class="myradio"> 
     {{ radio }} 
    </div> 
    {% endfor %} 
Questions connexes