我遇到这个问题非常困难,因为我找到了答案,但它不起作用。我有一个带有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...
为什么哦为什么这不起作用?
答案 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 %}