代码之家  ›  专栏  ›  技术社区  ›  Nishant Nawarkhede

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

  •  0
  • Nishant Nawarkhede  · 技术社区  · 8 年前

    这是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' ,cleaned_data返回f为true。

    预期行为:

    表单应返回 False 对于 “0” True 对于 '1' ,如何实现此目标?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Daniel Hepper    8 年前

    默认情况下, forms.BooleanField 使用 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 ,否则表单不会验证错误值。

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