Флажок Django Iterating Over SelectMultiple Renders Numbers

Я пытаюсь перебрать форму MultipleSelect, в которой используется виджет CheckboxSelectMultiple, и отображать каждый флажок внутри. Вот код итерации:

{% for choice in form.mp4_rasters %}
       <label class="checkbox inline">
          {{ choice }}
       </label>
{% endfor %}

Вот форма, которую я объявил:

from django import forms

MP4_CHOICES = ('240p', '360p', '720p', '1080p')
WEBM_CHOICES = MP4_CHOICES
OGG_CHOICES = MP4_CHOICES
MISC_CHOICES = ('MP3', 'Roku')

class BatchSubmitForm(forms.Form):
    video_file = forms.FileField()
    framerate = forms.FloatField()
    title = forms.CharField()
    destination = forms.CharField()
    mp4_rasters = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=MP4_CHOICES)
    webm_rasters = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=WEBM_CHOICES)
    ogg_rasters = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=OGG_CHOICES)
    misc_rasters = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=MISC_CHOICES)

При рендеринге я ожидал, что он выведет каждый флажок с указанным мной именем, но вместо «240p», «360p» и т. Д. Я получаю числа (4, 6, 2, 0) для каждого флажка. Я также пробовал рендеринг на основе выбора виджета, используя следующий код в качестве альтернативы:

{% for choice in form.mp4_rasters.field.widget.choices %}
           <label class="checkbox inline">
              {{ choice }}
           </label>
    {% endfor %}

Этот код правильно отображает имена, но в нем нет флажка. Что я могу добавить к любому из них, чтобы он отображал флажки, а также соответствующие имена, определенные в форме?


person coltonoscopy    schedule 11.10.2013    source источник


Ответы (1)


Изменять:

MP4_CHOICES = ('240p', '360p', '720p', '1080p')

to

MP4_CHOICES = (('240p', '240p'), 
               ('360p', '360p'), 
               ('720p', '720p'), 
               ('1080p', '1080p'))

Причина, по которой вы видите числа, заключается в том, что choices ожидает кортеж, и, поскольку вы не предоставляете ему кортеж, он делает это.

('240p') оценивается как ('2', '4', '0', 'p'), и ('2', '4', '0', 'p')[1] отображается в раскрывающемся списке. Следовательно, (4, 6, 2, 0).

person karthikr    schedule 11.10.2013