Django models里面blank和null的用法区别
一,使用方式
null = True
blank = True
null = True
,blank = True
二,区别
null
这个选项跟数据库有关:
null=True的话,数据库中该字段是NULL,即允许空值
null=False(默认)的话,数据库中该字段是NOT NULL,即不允许空值
blank
这个选项和数据验证(表单验证等)有关:
blank=False(默认)的话,字段没被赋值则会抛错;blank=True则不会。
CharField和TextField
CharField和TextField如果没有赋值的话,会被保存成空字符串而不是NULL。
其他字段,例如IntegerField、DateField,没被赋值则会被保存成NULL。
例子:
1 2 3 4 5 6 7 | models.DateTimeField(blank = True ) # raises IntegrityError if blank models.DateTimeField(null = True ) # NULL allowed, but must be filled out in a form models.CharField(blank = True ) # No problem, blank is stored as '' models.CharField(null = True ) # NULL allowed, but will never be set as NULL |
1 2 3 4 5 6 7 8 9 10 11 12 | class Test(models.Model): charNull = models.CharField(max_length = 10 , null = True ) charBlank = models.CharField(max_length = 10 , blank = True ) charNullBlank = models.CharField(max_length = 10 , null = True , blank = True ) intNull = models.IntegerField(null = True ) intBlank = models.IntegerField(blank = True ) intNullBlank = models.IntegerField(null = True , blank = True ) dateNull = models.DateTimeField(null = True ) dateBlank = models.DateTimeField(blank = True ) dateNullBlank = models.DateTimeField(null = True , blank = True ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | CREATE TABLE Test ( ` id ` INT ( 11 ) NOT NULL AUTO_INCREMENT, `charNull` VARCHAR( 10 ) NULL DEFAULT NULL, `charBlank` VARCHAR( 10 ) NOT NULL, `charNullBlank` VARCHAR( 10 ) NULL DEFAULT NULL, `intNull` INT ( 11 ) NULL DEFAULT NULL, `intBlank` INT ( 11 ) NOT NULL, `intNullBlank` INT ( 11 ) NULL DEFAULT NULL, `dateNull` DATETIME NULL DEFAULT NULL, `dateBlank` DATETIME NOT NULL, `dateNullBlank` DATETIME NULL DEFAULT NULL ) |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步