【问题标题】:Models CharField Blank and Null模型 CharField 空白和空
【发布时间】: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.

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

【问题讨论】:

    标签: python django django-models


    【解决方案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()
    

    【讨论】:

    • 完整答案,也请阅读参考资料。谢谢!
    猜你喜欢
    • 2011-10-30
    • 2011-05-02
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多