2013-10-11 4 views
1

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

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

Вот это форма I заявил:

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 %} 

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

ответ

1

Изменение:

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

в

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).

Смежные вопросы