在Django中区分null=True,space=True

在Django中区分null=True,space=True

在Django中添加数据库字段时,通常会编写models.CharField(max_length=100, null=True, blank=True)..同样的事情也发生在ForeignKeyDecimalField有什么基本的区别

  1. null=True

  2. blank=True

  3. null=Trueblank=True

就不同的(CharFieldForeignKeyManyToManyFieldDateTimeField)田野。使用1/2/3的优点/缺点是什么?


白猪掌柜的
浏览 757回答 3
3回答

偶然的你

null=True集NULL(相对于NOT NULL)在数据库中的列上。Django字段类型的空白值,如DateTimeField或ForeignKey将作为NULL在数据库里。blank=True确定表单中是否需要该字段。这包括管理和您自己的自定义表单。如果blank=True那么这个字段就不需要了,但是如果它是False字段不能为空白。这两者的组合是如此频繁,因为通常情况下,如果要允许一个字段在表单中为空白,则还需要数据库来允许NULL该字段的值。例外是CharFieldS和TextFields,在Django是绝不可能存为NULL..空白值作为空字符串存储在DB中('').有几个例子:models.DateTimeField(blank=True) # raises IntegrityError if blankmodels.DateTimeField(null=True) # NULL allowed, but must be filled out in a form显然,这两个选项使用起来不合逻辑(不过,可能有一个用例)null=True, blank=False如果您希望在窗体中始终需要一个字段,但是在通过类似shell的方法处理对象时是可选的。)models.CharField(blank=True) # No problem, blank is stored as ''models.CharField(null=True) # NULL allowed, but will never be set as NULLCHAR和TEXT类型从未保存为NULL贾安戈null=True是不必要的。但是,您可以手动将其中一个字段设置为None强制设置为NULL..如果您有一个可能需要这样做的场景,则仍然应该包括null=True.

慕田峪9158850

这就是ORM的地图blank & nullDjango 1.8字段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)为PostgreSQL 9.4是:CREATE TABLE Test (   id              serial                    NOT NULL,   "charNull"      character varying(10),   "charBlank"     character varying(10)     NOT NULL,   "charNullBlank" character varying(10),   "intNull"       integer,   "intBlank"      integer                   NOT NULL,   "intNullBlank"  integer,   "dateNull"      timestamp with time zone,   "dateBlank"     timestamp with time zone  NOT NULL,   "dateNullBlank" timestamp with time zone,   CONSTRAINT Test_pkey PRIMARY KEY (id))为MySQL 5.6是: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)
打开App,查看更多内容
随时随地看视频慕课网APP