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

Django中clean函数引发非空约束失败问题求助

解决Django中NOT NULL constraint failed: appearance_banner.banner_button_url错误

问题根源

  • 你的clean方法逻辑过于复杂,存在判断错误,导致banner_button_activate为False时,错误触发了非空校验。
  • 若之前模型中banner_button_url未设置null=True,后续添加后未执行数据库迁移,数据库层面仍会保留NOT NULL约束,引发报错。

修正步骤

1. 简化校验逻辑

替换原clean方法,只在按钮激活时校验标题和URL的非空性,完全匹配你的需求:

def clean(self):
    # 按钮激活时,标题和URL必须填写
    if self.banner_button_activate:
        if not self.banner_button_title:
            raise ValidationError({"banner_button_title": "Eğer bu bölüm aktifse button title dolu olmalı."})
        if not self.banner_button_url:
            raise ValidationError({"banner_button_url": "Eğer bu bölüm aktifse buton url dolu olmalı."})
    # 调用父类clean方法,确保默认校验逻辑执行
    super().clean()

2. 同步数据库配置

执行迁移命令,将模型的null=True, blank=True配置同步到数据库:

python manage.py makemigrations
python manage.py migrate

额外说明

原clean方法的逻辑错误在于:当banner_button_activate为False时,只要标题或URL为空,就会进入错误分支,这与你"不激活时填写与否均可"的需求冲突。简化后的逻辑仅聚焦激活状态下的必填校验,避免了逻辑混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:15:36