Django models里面blank和null的用法区别

一,使用方式

  • null = True 
  • blank = True 
  • null = Trueblank = 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
)

 

posted @ 2020-07-10 10:34  丿小贰灬  阅读(692)  评论(0编辑  收藏  举报