Django ChoiceField: не удается получить доступ к выборам в шаблоне - PullRequest
1 голос
/ 10 июля 2011

после нескольких часов попыток я разочарован этим.Я просто не могу зациклить выбор моего ChoiceField в шаблоне.Он даже не войдет в цикл.Но если я получу доступ к полю формы с помощью pdb, все будет в порядке.

моя форма:

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

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

мой взгляд:

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

мой шаблон:

<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

Ответы [ 2 ]

2 голосов
/ 07 августа 2012

Из документации Django (https://docs.djangoproject.com/en/dev/ref/forms/widgets/):

Новое в Django 1.4 - для более детального управления сгенерированной разметкой вы можете переключаться между переключателями в шаблоне. Предполагая форму myform с полем beatles, которое использует RadioSelect в качестве виджета:

  {% for radio in myform.beatles %}
  <div class="myradio">
      {{ radio }}
  </div>
  {% endfor %}
0 голосов
/ 10 июля 2011

Почему ты так делаешь? Вы должны позволить самому полю выводить, включая выбранное поле. Если вам нужно установить один из вариантов выбора, вы должны сделать это в виде или в форме с параметром initial:

    context.update({
        'searchForm': MultiSearchForm(initial={'mode': your_choice}),
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...