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。
例子:
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
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)
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 )