Django数据库设计中字段为空的方式

Posted MacoLee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django数据库设计中字段为空的方式相关的知识,希望对你有一定的参考价值。

今天在做数据库设计的时候,设计了如下User表,其中我把email和phone字段设置为允许为空:

 1 class User(models.Model):
 2     username = models.CharField(用户名,max_length=50)
 3     password = models.CharField(密码,max_length=255)
 4     email = models.EmailField(邮箱,null=True)
 5     phone = models.CharField(电话,max_length=11,null=True)
 6 
 7     group = models.ManyToManyField(UserGroup,verbose_name=用户组)
 8 
 9     create_date = models.DateTimeField(创建时间,auto_now_add=True)
10     update_date = models.DateTimeField(最近修改时间,auto_now=True)

但当我在使用Django后台管理添加数据时发现还是不能输入空字段,仍然需要输入内容。

 

查了资料才知道,在使用Django设计数据库表时,

如果设置null=True,则仅表示在数据库中该字段可以为空,但使用后台管理添加数据时仍然要需要输入值,因为Django自动做了数据验证不允许字段为空

如果想要在Django中也可以将字段保存为空值,则需要添加另一个参数:blank=True

概况来说就是:

null=True
  数据库中字段可以为空
blank=True
  django的 Admin 中添加数据时可允许空值
 
因此,要想实现在Django 后台管理中添加空值,则应该如下设计表:
 1 class User(models.Model):
 2     username = models.CharField(用户名,max_length=50)
 3     password = models.CharField(密码,max_length=255)
 4     email = models.EmailField(邮箱,null=True,blank=True)
 5     phone = models.CharField(电话,max_length=11,null=True,blank=True)
 6 
 7     group = models.ManyToManyField(UserGroup,verbose_name=用户组)
 8 
 9     create_date = models.DateTimeField(创建时间,auto_now_add=True)
10     update_date = models.DateTimeField(最近修改时间,auto_now=True)

 

以上是关于Django数据库设计中字段为空的方式的主要内容,如果未能解决你的问题,请参考以下文章

Java导出excel的程序里去除字段为null的数据,取出不为空的数据

Oracle中查询某字段不为空的SQL语句怎么写

如何使用 typeorm 将可为空的数据库字段设置为 NULL?

springmvc返回数据库不为空的数据的方法(或JSONObject过滤null字段的方法)

sql 子查询中部分数据有空值,怎么返回0,NULL+数字=null出来不可以

获取两个字段中不为空的那个字段 ---SQL