Django Model中null属性的使用方法

Model中null属性的使用方法

在Django模型介绍的博客Django学习Day9——模型的使用(一)中,我们简单提到了模型中null属性和blank属性的区别,null属性是数据库级别的,对于存储的数据进行约束;而blank属性是用于表单验证环节。这篇博客,对于null属性的使用进行更加详细的介绍。

1、null = True

       null = True 表示该字段可以存储NULL。则在数据库中该字段会用NULL来存储空值,即如果传入空值,数据库中显示为NULL。

示例如下:

我们创建数据表Test,其中四个不同数据类型的字段均设置为null = True。

from django.db import models

class Test(models.Model):
    name = models.CharField(max_length=50, null=True)
    age = models.SmallIntegerField(null=True)
    email = models.EmailField(null=True)
    info = models.TextField(null=True)

然后,我们向数据表Test中传入空数据,其中空数据是指:(1)新增数据时,字段不传入参数;(2)新增数据时,字段传入值设置为None。

因此,下面两种方式,传入的数据均为空数据。

在数据库中进行查看:

可以看到,当null设置为True的时候,如果传入空值,则在数据表中使用NULL来表示。

注意:对于字符串来讲,空字符串''空值是不同的概念。如果,我们传入空字符串,在数据库中是不会显示为NULL的,如下所示:

延伸内容:

1、如果我们把name字段设置为UNIQUE索引,对于空字符串来讲,数据表中name字段不能出现两个'',否则会违背唯一性约束;但是name字段可以有多个NULL。

如下所示:

现在数据表中的内容是:

然后,我们在name字段添加唯一索引:

此时,如果我们新增数据的时候,将name字段设置为'',会报唯一性约束的错误:

2、如果我们为null = True的字段设置了默认值,那么传入空值的时候,有两种情况:

(1)如果传入空值的时候,不给字段传值,会将默认值存入到数据库中。

from django.db import models

class Test(models.Model):
    name = models.CharField(max_length=50, null=True, unique=True, default='佚名')
    age = models.SmallIntegerField(null=True, default=18)
    email = models.EmailField(null=True, default='[email protected]')
    info = models.TextField(null=True, default='默认信息')

此时,新增数据的时候,依然传入空值:

在数据库中,存储的是每个字段的默认值:

(2)如果传入空值的时候,字段传入值设置为None这时不会将默认值存入到数据库中,仍然存NULL

2、null = False

       null = False 表示该字段不可以存储NULL。传入空值的时候也存在两种情况:

首先,我们对之前的Test表进行修改:(这里我们删去了整型字段age,因为整型字段如果设置null = False,必须设置默认值)

from django.db import models

class Test(models.Model):
    name = models.CharField(max_length=50, null=False)
    email = models.EmailField(null=False)
    info = models.TextField(null=False)

(1)新增数据时,不给字段传值,对于字符串类型的字段,即使我们没有设置默认值,Django也会自动将该数据类型下的默认值存储到数据库。

在数据库中进行查看(这里字符串类型默认值是空字符串''):

(2)新增数据时,字段值设置为None,会报错。

报错信息如下:

猜你喜欢

转载自blog.csdn.net/ProQianXiao/article/details/113748114