проблема django, повторяющаяся по SelectMultiple / CheckboxSelectMultiple в шаблоне - PullRequest
2 голосов
/ 09 сентября 2011

Мне очень тяжело с этой проблемой, потому что я нашел ответ, но он не работает. У меня есть приложение Django с формой с полем SelectMultiple / CheckboxSelectMultiple ...

Моя цель

Мне нужно перебрать шаблон над параметрами моего поля "метки".
Печать {{ form.labels }} в шаблоне работает нормально (то есть, объект туда попадает).

Моя проблема

Во всем Интернете я нашел один и тот же способ сделать это - и я попробовал все возможные варианты. Пример см. В ответе Джаррета Харди здесь .

Мой код

models.py

class myModle(models.Model):
  labels = models.CharField(max_length=1000)
  class Meta:
    db_table = u'myTable'

forms.py

class MYMODELForm(ModelForm):
    class Meta:
        model = myModel
    def __init__(self, *args, **kwargs):
        super(MYMODELForm, self).__init__(*args, **kwargs)
    labelList = set()
    #now I'm filling the set with strings (label names)
    #one of the two following line:
    self.fields['labels'] = forms.CharField(required=False,widget=forms.CheckboxSelectMultiple(choices=[(x,x) for x in labelList]))
    self.fields['labels'] = forms.CharField(required=False,widget=forms.SelectMultiple(choices=[(x,x) for x in labelList]))

myTemplate.html

<table>
    <tr>
         <td>
            <!-- All variations of... -->
            {% for choice_id, choice_label in form.labels.field.items %} 
            {{ choice_id }} = {{ choice_label }} <br/>
            {% endfor %} 
         </td>
     </tr>
 </table>       

myStyle.css

Nothing interesting her...

views.py

Nothing interesting her...

Итак ...

Почему это не работает ???

1 Ответ

4 голосов
/ 09 сентября 2011

Вы используете items вместо choices.

Ток:

{% for choice_id, choice_label in form.labels.field.items %}

Должно быть:

{% for choice_id, choice_label in form.labels.field.choices %}

так как вы поместили варианты выбора в виджет, эти варианты переопределяют варианты выбора поля, поэтому перебирайте варианты выбора виджета:

{% for choice_id, choice_label in form.labels.field.widget.choices %}

...