Django表单复选框组

Django表单复选框组,django,django-forms,Django,Django Forms,我有一个django应用程序,需要通过复选框进行大量输入 a = forms.BooleanField(required=False, initial=True) b = forms.BooleanField(required=False, initial=True) c = forms.BooleanField(required=False, initial=True) 但这在模板代码中看起来很混乱,例如: {% if form.data.a%}A{% endif %} {% if form

我有一个django应用程序,需要通过复选框进行大量输入

a = forms.BooleanField(required=False, initial=True)
b = forms.BooleanField(required=False, initial=True)
c = forms.BooleanField(required=False, initial=True)
但这在模板代码中看起来很混乱,例如:

{% if form.data.a%}A{% endif %}
{% if form.data.a%}B{% endif %}
{% if form.data.a%}C{% endif %}
我希望有一个复选框列表可以做到这一点

但这需要所有复选框具有相同的名称和不同的值,例如:

<input type="checkbox" name="letters" value="a" />
<input type="checkbox" name="letters" value="b" />
<input type="checkbox" name="letters" value="c" />

因此,在我的模板代码中,我可以说
request.POST.getlist(“字母”)

但是我似乎找不到任何关于如何将布尔字段设置为具有相同名称和不同值的信息


你能帮忙吗,或者有什么更简单的方法吗?

有什么理由不在字段上循环,不加区别地打印它们吗?换句话说,类似于:

{% for field in form %}
    {{ field }}
{% endfor %}
{% for field in form %}
    {% if 'checkbox' in field.as_widget %}
        {{ field }}
    {% endif %}
{% endfor %}
…将按顺序打印所有字段,包括您的复选框,并选择需要选中的复选框?这似乎是迄今为止最简单的机制

如果您真的需要循环检查复选框,这是可以做到的,尽管我要警告的是,我将要解释的机制没有文档记录,在某些边缘情况下可能会失败。尽管如此,您仍然可以执行以下操作:

{% for field in form %}
    {{ field }}
{% endfor %}
{% for field in form %}
    {% if 'checkbox' in field.as_widget %}
        {{ field }}
    {% endif %}
{% endfor %}
这将在表单中的所有字段上循环,但只打印复选框。代码工作的原因是因为
字段。因为widget
是为widget打印HTML的方法,并且由于widget是
,所以字符串“checkbox”出现在其中(而不是在大多数其他widget中)

在处理表单时,不必处理任何内容的
request.POST.getlist
。只需实例化表单并传递
请求.POST
作为第一个位置参数,如中所述。请查看:

形式:

CHOICES = (
(0, 'a'),
(1, 'b'),
(2, 'c'),
)

class MyForm(forms.Form):
    letters = forms.MultipleChoiceField(
            choices=CHOICES, 
            label="...", 
            required=True/False) 
您可以使用:

request.POST.getlist( “letters” ) 
或者在检查表格有效性后不看帖子:

 form.cleaned_data.letters   

太好了,谢谢!我甚至不需要request.POST.getlist(“信件”)。我只使用form.cleaned_data.letter这也行。但我不知道多重冰场。谢谢