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 IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说方法的参数最好不要超过4个?
· C#.Net 筑基-优雅 LINQ 的查询艺术
· 一个自认为理想主义者的程序员,写了5年公众号、博客的初衷
· 大数据高并发核心场景实战,数据持久化之冷热分离
· 运维排查 | SaltStack 远程命令执行中文乱码问题
· 博客园众包平台:诚征3D影像景深延拓实时处理方案(预算8-15万)
· 为什么说方法的参数最好不要超过4个?
· 发布一个小功能,通过 markdown 图片语法嵌入B站视频
· 《HelloGitHub》第 111 期
· 谷歌新AI工具杀疯了?免费,但有点坑!Gemini CLI 抢先实测