在Django的models.py中,default、null和blank有什么区别?
null=True
:这个意思是说在数据库里,这个字段可以没有值,也就是可以是空的。blank=True
:这个是说在表单里,这个字段可以不填写,也就是可以留空。default = 0
:这个表示如果你没有给这个字段指定值,它会自动使用0作为默认值。
这三者有什么区别呢?什么时候用哪个呢?
5 个回答
来自文档:
null
:如果设置为真,Django会把空值存储为数据库中的NULL。默认是假的。
blank
:如果设置为真,这个字段可以留空。默认是假的。
default
:这个字段的默认值。
你可以用"default
"来设置一个默认值,如果你的代码没有给这个字段指定值,就会用这个默认值。
使用"blank
"是为了表单验证——设置blank=True就允许这个字段留空。
如果你想在数据库中把空值存储为“null”,就用"null
"。不过,通常情况下,建议把空值设置为一个空字符串或者0,这样更合适。
直接来自 Django模型字段参考:
Field.null
如果设置为
True
,Django会把空值存储为NULL
在数据库里。默认是False
。需要注意的是,空字符串会始终被存储为空字符串,而不是
NULL
。只有在处理非字符串类型的字段,比如整数、布尔值和日期时,才使用null=True
。对于这两种类型的字段,如果你希望在表单中允许空值,还需要设置blank=True
,因为null
这个参数只影响数据库的存储(见blank
)。尽量避免在基于字符串的字段,比如
CharField
和TextField
上使用null
,除非你有很好的理由。如果一个字符串类型的字段设置了null=True
,那就意味着它有两种表示“没有数据”的可能值:NULL和空字符串。在大多数情况下,拥有两种“没有数据”的值是多余的;Django的惯例是使用空字符串,而不是NULL
。
Field.blank
如果设置为
True
,这个字段允许留空。默认是False
。需要注意的是,这和
null
是不同的。null
主要是和数据库相关,而blank
是和验证相关。如果一个字段设置了blank=True
,那么在Django的管理界面上可以输入空值。如果一个字段设置了blank=False
,那么这个字段就是必填的。
Field.default
这个字段的默认值。可以是一个具体的值,也可以是一个可调用的对象。如果是可调用的对象,每次创建新对象时都会被调用。