当我们在django中添加一个数据库字段时,我们通常会写models.CharField(max_length = 100,null = True,blank = True)。用ForeignKeyDecimalField做同样的事情。有什么基本的区别在于

  • null = True only
  • blank = True only
  • null = Trueblank = True

    关于不同的(CharFieldForeignKeyManyToManyFieldDateTimeField)字段。使用1/2/3有什么优点/缺点?

在数据库中的列上设置NULL(而不是NOT NULL)。 Django字段类型(如DateTimeFieldForeignKey)的空值将作为NULL存储在DB中。

blank = True决定了表单中是否需要该字段。这包括管理员和您自己的自定义表单。如果blank = True那么这个字段不是必需的,而如果是False,那么这个字段不能是空白的。

这两者的组合非常频繁,因为通常情况下,如果您要允许表单中的某个字段为空,则还需要您的数据库允许NULL值该领域。例外是CharFieldTextField,它们在Django中永远不会保存为NULL。空值作为空字符串存储在数据库中(')。

几个例子:

models.DateTimeField(blank=True) # raises IntegrityError if blank

models.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 NULL

CHARTEXT类型从来不会被Django保存为NULL,所以null = True是不必要的。但是,您可以手动将其中一个字段设置为None,以强制将其设置为NULL。如果您有可能需要的场景,您仍然应该包含null = True

这是ORM如何映射blank& Django 1.8的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)

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
)

Django中blank和NULL的更多相关文章

  1. 关于Django字段类型中 blank和null的区别

    blank 设置为True时,字段可以为空.设置为False时,字段是必须填写的.字符型字段CharField和TextField是用空字符串来存储空值的. 如果为True,字段允许为空,默认不允许. ...

  2. Django models中关于blank与null的补充说明

    Django models中关于blank与null的补充说明 建立一个简易Model class Person(models.Model): GENDER_CHOICES=( (1,'Male'), ...

  3. Django models中关于blank与null

    建立一个简易Model class Person(models.Model): GENDER_CHOICES=( (1,'Male'), (2,'Female'), ) name=models.Cha ...

  4. models中字段参数blank和null的用法区别

    blank当blank=True时,说明此处的数据可以不填,默认情况下为False,也就意味着默认情况下,所输入的数据不得空,blank是和页面表单有关,在页面需要输入参数的时候,如果在models里 ...

  5. django中使用Profile扩展User模块(基于django 1.10版本下)

    版本:Django 1.10.1(其他版本可能有不同的实现好解决办法) 参考官方文档:https://docs.djangoproject.com/en/1.10/topics/auth/custom ...

  6. django中migration文件是干啥的

    昨天很蠢的问leader git push的时候会不会把本地的数据库文件上传上去,意思是django中那些migration文件修改之后会不会上传. 然后得知不会,因为所有的数据库都存在本机的mysq ...

  7. Django中的Model(字段)

    Model Django中的model是用来操作数据库的,Model是一个ORM框架,我们只需要关心model的操作,而不需要关心到底是哪一种数据库. 一.基本知识: 数据库引擎: Django中自带 ...

  8. Django中的ORM

    Django中ORM的使用. 一.安装python连接mysql的模块:MySQL-python sudo pip install MySQL-python 安装完成后在python-shell中测试 ...

  9. Django中用户权限模块

    Django中用户权限模块 1 auth模块 auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和admin模块配合使用, 快速建立网站的管理系 ...

随机推荐

  1. #pragma omp parallel for

    #pragma omp parallel for是OpenMP中的一个指令,表示接下来的for循环将被多线程执行,另外每次循环之间不能有关系.示例如下: int main(int argc, char ...

  2. linux服务器项目搭建常用命令

    linux下载链接文件 wget -c 后面是该网络地址和文件的位置. 例如:wget -c http://apache.opncas.or/MySQL/MySQL-7/v7.0.67/bin/MyS ...

  3. 前端页面布局之Grid布局

    在讲布局前,先说两句题外话,写博时,突然想到了郭德纲说过的一个段子“说两个人骂架,不是你有理,你嗓门大,你唾沫星子崩我一脸,你就能骂赢,要看谁命长,过两年你死了,我站你坟头咋说咋是对的,你在那小匣里还 ...

  4. charles for https

    To remotely capture http or https traffic with charles you will need to do the following: HOST - Mac ...

  5. MyBatis-Spring(五)--MapperScannerConfigurer实现增删改查

    上一篇文章中已经介绍,MapperScannerConfigurer可以通过扫描的方式获取我们需要的mapper,而不需要我们自己去配置,它的基本配置如下: <bean class=" ...

  6. Eureka 客户端连接Eureka服务端时 报Cannot execute request on any known server 解决办法

    报Cannot execute request on any known server 这个错,总的来说就是连接Eureka服务端地址不对. 因为配置eureka.client.serviceUrl. ...

  7. Redis学习01——介绍与搭建环境

    Redis学习01介绍与搭建环境一简介二yum配置已经配置了的可以跳过三安装gcc四安装redis1 上传Redis到linux中2 解压到usrlocal下3 编译redis4 安装redis5 拷 ...

  8. Oracle基础知识:DECODE、NVL

    select 1 from PMADW.GET_WX_DATAPUSH_NEW_CHECK A INNER JOIN PMADW.V_EXCEPTION_QTY_MAIN B on DECODE( A ...

  9. NYOJ1367 物流配送

    题目描述: 物流配送是物流活动中一种非单一的业务形式,它与物品流动.资金流动紧密结合.备货是配送的准备工作或基础工作,备货工作包括筹集货源.订货或购货.集货.进货及有关的质量检查.结算.交接等.配送的 ...

  10. 记录centos7下tomcat部署war包过程

    记录centos7下tomcat部署war包过程 1.官网下载tomcat安装包.gz结尾的 2.上传到/usr/local/ ,并解压到tomcat目录下 3.进入tomcat/bin目录,运行./ ...