只有 BooleanField 的 Django 表单

2024-01-18

我对 Django 相当陌生,我正在使用 Django 1.0。 我有这个:
形式.py:

class MyForm(forms.Form):
    extra_cheeze = forms.BooleanField(required=False,
                                      initial=False,
                                      label='Extra cheeze')

视图.py:

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

问题是,除非选中复选框,否则表单无效,因此似乎没有办法从字段中获取 False 值。 据我所知the docs http://docs.djangoproject.com/en/1.0/ref/forms/fields/#booleanfield,它应该可以工作。如果我将 CharField 添加到我的表单中,它就会起作用......

我是否误解了这里的某些内容或者这是一个错误? (是的,我用谷歌搜索过,但没有找到相关的内容)

Update:正如@Dominic Rodger 的建议,我尝试添加一个隐藏字段
dummy = forms.CharField(initial='dummy', widget=forms.widgets.HiddenInput())
这使得表格有效。这个解决方法使我能够立即继续前进,但知道我是否误解了某些内容仍然很有趣......


我的问题中的代码有一个错误。感谢@d0ugal 通过提供一个略有不同的示例来帮助我发现它。问题就在这里:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

只有 BooleanField 的 Django 表单 的相关文章

随机推荐