Python django表单应基于字符串比较返回数据
这是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作为
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
的事实?