当在表单上留空时,Django nullbooleanfield默认为'False',不应该为Null吗?

时间:2018-12-04 20:32:55

标签: django

models.py

my_field = models.NullBooleanField(null=True)

forms.py

my_field = forms.BooleanField(
    label='my_field',
    required=False,
    widget=forms.RadioSelect(choices=[(True,'yes'),(False,'no')]))

在未选择单选按钮的情况下提交表单时,该表单将保存并默认为false。它不应该默认为Null吗?

1 个答案:

答案 0 :(得分:0)

您的表单使用forms.BooleanField作为表单字段,因此它没有None的概念。您应该使用NullBooleanField [Django-doc]

class SomeForm(forms.Form):
    my_field = forms.NullBooleanField(
        label='my_field',
        required=False,
        widget=forms.RadioSelect(choices=[(True,'yes'),(False,'no')])
    )

正如documentation of the NullBooleanField所说:

  

NullBooleanField

     

class NullBooleanField(**kwargs)

     
      
  • 默认小部件:NullBooleanSelect
  •   
  • 空值:None
  •   
  • 标准化为:Python TrueFalseNone值。
  •   
  • 不进行任何验证(即,它从不引发ValidationError)。
  •   

对于BooleanField,空值为False

  

BooleanField

     

class BooleanField(**kwargs)

     
      
  • 默认小部件:CheckboxInput
  •   
  • 空值:False
  •   
  • 标准化为:Python TrueFalse值。
  •   
  • 如果该字段具有True,则验证该值为required=True(例如,复选框已选中)。
  •   
  • 错误消息键:必需
  •