首页 > 解决方案 > 当表单上留空时,Django nullbooleanfield 默认为“False”,不应该为 Null 吗?

问题描述

模型.py

my_field = models.NullBooleanField(null=True)

表格.py

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

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

标签: django

解决方案


您的表单使用forms.BooleanFieldas 表单字段,因此它没有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')])
    )

正如文档NullBooleanField所说:

NullBooleanField

class NullBooleanField(**kwargs)

  • 默认小部件:NullBooleanSelect
  • 空值:None
  • 规范化为: PythonTrue或值。FalseNone
  • 不验证任何内容(即,它从不引发 ValidationError)。

而对于 a BooleanField,空值为False

BooleanField

class BooleanField(**kwargs)

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

推荐阅读