django字段设置null和blank的区别
null
这个选项跟数据库有关。
null=True的话,数据库中该字段是NULL,即允许空值;null=False(默认)的话,数据库中该字段是NOT NULL,即不允许空值。
blank
这个选项和数据验证(表单验证等)有关。
blank=False(默认)的话,字段没被赋值则会抛错;blank=True则不会。
CharField和TextField
CharField和TextField如果没有赋值的话,会被保存成空字符串而不是NULL。
其他字段,例如IntegerField、DateField,没被赋值则会被保存成NULL。
几种情况
null=False, blank=False:其实null不用设置,因为blank的判定在前,已经保证了值不为空。但是如果数据库会被其他应用操作,null的设置还是有意义的。
CharField(null=False):null不用设置,因为CharField默认是空字符串。
IntegerFiled(blank=True):如果该字段没有被赋值,数据验证时可以通过blank=True,但是执行SQL的时候,会因为该字段是NOT NULL而出错。
参考链接:
https://docs.djangoproject.com/en/1.8/ref/models/fields/#null
https://code.djangoproject.com/wiki/NewbieMistakes#IntegerNULLS
http://stackoverflow.com/questions/8609192/differentiate-null-true-blank-true-in-django