You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模型约束失效:如何强制两字段至少一个非空/非空字符串?

解决Django Fruit模型CheckConstraint不生效的问题

原约束逻辑存在错误:当字段为null时,~Q(name1__exact='')会被判定为true(因为null不等于空字符串),导致整个check条件始终成立,无法阻止两个字段都为空的实例创建。

正确的约束逻辑应该是至少一个字段同时满足非null且非空字符串,修改后的模型代码如下:

class Fruit(models.Model):
    name1 = models.CharField(max_length=255, blank=True, null=True)
    name2 = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        constraints = [
            models.CheckConstraint(
                check=(
                    (Q(name1__isnull=False) & ~Q(name1__exact=''))
                    | (Q(name2__isnull=False) & ~Q(name2__exact=''))
                ),
                name='color_names_not_null_or_empty'
            )
        ]

修改完成后,需要生成并应用数据库迁移,使约束生效:

  • 生成迁移文件:python manage.py makemigrations
  • 应用迁移:python manage.py migrate

内容的提问来源于stack exchange,提问作者Artem Dumanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:04:59