Python django表单应基于字符串比较返回数据

Python django表单应基于字符串比较返回数据,python,django,python-2.7,Python,Django,Python 2.7,这是django表格 In [61]: from django import forms In [62]: class myform(forms.Form): ...: f = forms.BooleanField() ...: In [63]: x = myform({'f': '0'}) In [64]: x.is_valid() Out[64]: True In [65]: x.cleaned_data Out[65]: {'f': True} 我将f作为

这是django表格

In [61]: from django import forms

In [62]: class myform(forms.Form):
    ...:     f = forms.BooleanField()
    ...:

In [63]: x = myform({'f': '0'})

In [64]: x.is_valid()
Out[64]: True

In [65]: x.cleaned_data
Out[65]: {'f': True}
我将f作为
'0'
传递,清除的\u数据将f作为True返回

预期行为:


表单应该为
'0'
返回
False
,为
'1'
返回
True
,如何实现这一点?

默认情况下,
表单。BooleanField
使用
CheckboxInput
小部件。未选中的复选框在提交表单时不发送任何数据,因此
CheckboxInput
小部件将任何非空输入视为
True

您可以使用
RadioSelectInput
小部件解决此问题:

>>> class myform(forms.Form):
...   f = forms.BooleanField(widget=forms.RadioSelect, required=False)
...
>>> x = myform({'f': '0'})
>>> x.is_valid()
True
>>> x.cleaned_data
{'f': False}
>>> x = myform({'f': '1'})
>>> x.is_valid()
True
>>> x.cleaned_data
{'f': True}
请注意,您必须设置
required=False
,否则表单将不会验证falsy值


如果您只使用表单来验证数据而不呈现HTML,您可能需要考虑创建自己的窗体字段类。默认情况下,

< P> >代码>窗体。BooleanField < /C> >使用<代码> CHECKBOX输入< /COD>小部件。未选中的复选框在提交表单时不发送任何数据,因此
CheckboxInput
小部件将任何非空输入视为
True

您可以使用
RadioSelectInput
小部件解决此问题:

>>> class myform(forms.Form):
...   f = forms.BooleanField(widget=forms.RadioSelect, required=False)
...
>>> x = myform({'f': '0'})
>>> x.is_valid()
True
>>> x.cleaned_data
{'f': False}
>>> x = myform({'f': '1'})
>>> x.is_valid()
True
>>> x.cleaned_data
{'f': True}
请注意,您必须设置
required=False
,否则表单将不会验证falsy值


如果您只使用表单来验证数据而不呈现HTML,您可能需要考虑创建自己的表单字段类。

为什么不将初始值作为“代码”>布尔-< /代码>值本身?类似于:
x=myform(首字母={'f':False})
@SijanBhandari和?传递首字母应该如何改变表单将
'0'
验证为
True
的事实?为什么不将首字母传递为
布尔值本身?类似于:
x=myform(首字母={'f':False})
@SijanBhandari和?传递首字母应该如何改变表单将
'0'
验证为
True
的事实?