模型 CharField 空白和空

Posted

技术标签:

【中文标题】模型 CharField 空白和空【英文标题】:Models CharField Blank and Null 【发布时间】:2021-08-04 11:17:23 【问题描述】:

我有以下型号:

class Scenario(models.Model):
    title = models.CharField(max_length=30)
    subtitle = models.CharField(max_length=60)
    description = models.TextField(max_length=1000)
    image_url = models.ImageField(upload_to ='scenarios-pictures/%Y/%m/%d', default="", blank=False, null=False)
    slug = models.SlugField(null=True, unique=True)
    active = models.BooleanField(default=False)

    def __str__(self):
        return self.title

如果我尝试使用空值创建场景,它不会引发任何异常。

>>> from ihm_maquette.models import Scenario
>>> scenario = Scenario.objects.create(title='', subtitle='', description='', image_url='', slug='')
>>> scenario
<Scenario: >
>>> 

我不明白为什么,因为我在文档中读到空白和 null 默认为 False。 I've also read this explanation.

你知道为什么要创建这个对象吗?

【问题讨论】:

【参考方案1】:

null=False 并不意味着 CharField 不能将空字符串作为值。此外,模型的createsave 等方法在创建模型时不会验证模型。 blank 属性在模型验证时使用,通常当您调用form.is_valid() 时,表单会调用模型上可用于验证实例的各种方法。只需调用full_clean 方法即可验证实例(参考Validating objects [Django docs]):

from ihm_maquette.models import Scenario


# Don't call create instantiate it first
scenario = Scenario(title='', subtitle='', description='', image_url='', slug='')
scenario.full_clean() # will raise exception here
scenario.save()

【讨论】:

完整答案,也请阅读参考资料。谢谢!

以上是关于模型 CharField 空白和空的主要内容,如果未能解决你的问题,请参考以下文章

为啥 django 模型的空白和空值不同的选项?

设置空白和空值时,django 表单字段会引发错误

Django 1.7 空白 CharField/TextField 约定

Django模型空白=假不起作用?

如何在没有模型的 Django 表单中设置空白=假

在 Django 中将模型字段设置为必填