django问题迭代模板中的SelectMultiple / CheckboxSelectMultiple

时间:2011-09-08 22:18:17

标签: django django-templates django-forms

我遇到这个问题非常困难,因为我找到了答案,但它不起作用。我有一个带有SelectMultiple / CheckboxSelectMultiple字段的表单的Django应用程序...

我的目标

我需要在我的“标签”字段的选项中迭代模板 在模板中打印{{ form.labels }}工作正常(也就是说,该对象可以正常运行)。

我的问题

在网络上我发现了同样的方法 - 我尝试了所有可以想到的变化。例如,请参阅@Jarret Hardie的回答here

我的代码

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 个答案:

答案 0 :(得分:4)

您使用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 %}