Django形式只有一个BooleanField

Nik*_*las 12 django django-forms

我对Django很新,我正在使用Django 1.0.我有这个:
forms.py:

class MyForm(forms.Form):
    extra_cheeze = forms.BooleanField(required=False,
                                      initial=False,
                                      label='Extra cheeze')
Run Code Online (Sandbox Code Playgroud)

views.py:

def order_something(request):
    form = MyForm(request.POST or None)
    if request.method == 'POST' and form.is_valid():
        # do stuff...
Run Code Online (Sandbox Code Playgroud)

问题是除非选中复选框,否则表单无效,因此似乎没有办法从字段中获取False值.据我所知,从文档来看,它应该有效.如果我在表单中添加一个CharField,它就有效...

我在这里误解了什么,或者这是一个错误?(是的,我用Google搜索但没有发现任何相关内容)

更新:正如@Dominic Rodger所建议的,我尝试添加一个隐藏字段
dummy = forms.CharField(initial='dummy', widget=forms.widgets.HiddenInput())
,这使得表单有效.这种解决方法使我现在可以继续前进,但知道我是否误解了某些内容仍然很有趣......

Nik*_*las 10

我的问题中的代码中有一个错误.感谢@ d0ugal通过包含一个稍微不同的例子帮助我发现它.问题出在这里:

form = MyForm(request.POST or None) # <- PROBLEM HERE!!!!!!!!!!!!!!!!
if request.method == 'POST' and form.is_valid():
    # do stuff...
Run Code Online (Sandbox Code Playgroud)

错误是我假设request.POST如果它是一个帖子将评估为True.但是由于浏览器没有为未选中的复选框发布任何内容,并且这是唯一的字段,因此POST数据是一个空字典,其计算结果为False.这导致None用作初始化数据,导致表单未绑定且无效.
@ d0ugal的例子做了安全的事情并首先测试request.method.