Django null=True和blank=True的区别
今天遇到一个问题:
在restframework框架中开发,数据库了创建了一个model的属性如下所示:
remarks = models.CharField(verbose_name=u"描述", max_length=500, null=True)
remarks为非必传数据,所以在serializer中没有加验证,当时觉得没什么问题,但在提交数据时remarks为空字符串,报错为‘验证失败,remarks不能为空’。但当remarks不传值时则没有报错。
后来经过一番查找搜索,发现是没有加blank=True的原因。
最终经过修改:
remarks = models.CharField(verbose_name=u"描述", max_length=500, null=True, blank = True)
再次提交,即使remark为空字符串,依然能提交成功。
总结如下:
1、serializer中没有加验证,所以remarks不传值时可以通过,切此时默认为null。这是null=True在起作用,null是和数据库相关的,当reamrks为空时,就会被存储为NULL。
2、blank = True是页面表单验证相关的,表示在页面当中对应的表单可以为空,可以不填任何内容。
blank
设置为True时,字段可以为空。设置为False时,字段是必须填写的。字符型字段CharField和TextField是用空字符串来存储空值的。
如果为True,字段允许为空,默认不允许。
null
设置为True时,django用Null来存储空值。日期型、时间型和数字型字段不接受空字符串。所以设置IntegerField,DateTimeField型字段可以为空时,需要将blank,null均设为True。
如果为True,空值将会被存储为NULL,默认为False。
如果想设置BooleanField为空时可以选用NullBooleanField型字段。
一句话概括
- null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空。
- blank 是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填,比如 admin 界面下增加 model 一条记录的时候。直观的看到就是该字段不是粗体
- 通俗点说,该字段null=true后,你进行插入,修改操作时可以为空,然后Django把空值转换成null存在数据库中,而blank只是在表单验证的时候会检测你是否可以为空
Django null=True和blank=True的区别的更多相关文章
- django数据模型中 null=True 和 blank=True 有什么区别?
null 如果为 True , Django 在数据库中会将空值(empty)存储为 NULL .默认为 False . blank 设置字段是否可以为空,默认为False(不允许为空) 和null的 ...
- django 中 null=True 和 blank=True的区别!
null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空,即在Null字段显示为YES. blank 是针对表单的,如果 blank=True,表示你的前端表单填写该字段的时 ...
- django 数据模型中 null=True 和 blank=True 有什么区别
null: If True, Django will store empty values as NULL in the database. Default is False. 如果为True,空值将 ...
- 关于Django字段类型中 blank和null的区别
blank 设置为True时,字段可以为空.设置为False时,字段是必须填写的.字符型字段CharField和TextField是用空字符串来存储空值的. 如果为True,字段允许为空,默认不允许. ...
- Django models中关于blank与null的补充说明
Django models中关于blank与null的补充说明 建立一个简易Model class Person(models.Model): GENDER_CHOICES=( (1,'Male'), ...
- Django models中关于blank与null
建立一个简易Model class Person(models.Model): GENDER_CHOICES=( (1,'Male'), (2,'Female'), ) name=models.Cha ...
- Django在admin模块中显示auto_now_add=True或auto_now=True的时间类型列
转载自: http://www.tuicool.com/articles/ZryE7f 在Django如果model中的列定义了auto_now_add或auto_now属性,那么这种列不会在admi ...
- C++ 里大写TRUE和小写true区别
1.C++里大写TRUE和小写true区别 true是bool型的: TRUE是int型的,VC里这个是ms自己定义的: C++规定不允许只通过返回类型不同区别两个函数 2.MFC中的”false“和 ...
- Django之Model、Form、ModelForm区别
本节内容: 1:Model https://www.cnblogs.com/shuai1991/p/10844662.html 2:Form ...
随机推荐
- VIM 练级
https://coolshell.cn/articles/5426.html
- 腾讯云 docker 镜像 dotnet/core sdk aspnet
ccr.ccs.tencentyun.com/mcr.microsoft.com/dotnetcoresdk = mcr.microsoft.com/dotnet/core/sdk => 3 ...
- python 基础之字典一
字典特点:无序.键唯一 字典的创建 bag = {'cx':'chenxi','gghg':35} print(bag['cx']) 测试 chenxi Process finished with e ...
- FormsAuthentication.HashPasswordForStoringInConfigFile方法再.net core中的替代代码
FormsAuthentication.HashPasswordForStoringInConfigFile()这个加密方法再.net core中不存在了,可以用下面的方式达到一样的加密效果 usin ...
- System.arraycopy方法解释
数组拷贝 public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int lengt ...
- idea中scala语言自动补全变量的同时,也自动补全类型
IDE是IDEA,scala中,在new一个对象时,通过快捷键ctrl + Alt + V自动补全变量,但是我还想自动补全变量的类型,就像图中所示,在Specify type前面自动帮你打勾. 可以按 ...
- Linux命令:top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来不断刷新 ...
- Rcnn/Faster Rcnn/Faster Rcnn的理解
基于候选区域的目标检测器 1. 滑动窗口检测器 根据滑动窗口从图像中剪切图像块-->将剪切的图像块warp成固定大小-->cnn网络提取特征-->SVM和regressor进行分类 ...
- Maven项目-Tomcat - 方法无法为jsp编译类ClassFormatException的解决
解决方法:
- python 基础之列表的操作和列表的相关函数
一.列表的相关操作 1.列表的拼接 list1 = [1,2]list2 = [3,4]listvar = list1 + list2print(listvar) 2.列表的重复 lst = [1,2 ...