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

Django投票站点开发遇IntegrityError:NOT NULL约束失败如何解决?

解决Django投票站添加问题时的NOT NULL约束错误

这个错误的核心原因很明确:你要创建的Question对象中,question_text字段没有赋值,而数据库里这个字段被设置为不允许为空(NOT NULL),所以保存时触发了约束校验失败。

下面是具体的排查和解决步骤:

  • 检查模型定义
    打开polls/models.py,确认Question模型的question_text字段定义:

    class Question(models.Model):
        question_text = models.CharField(max_length=200)  # 这里没有null=True/blank=True
        pub_date = models.DateTimeField('date published')
    

    如果字段没加null=True或blank=True,就意味着创建对象时必须给question_text传非空值。要是你之前修改过模型,记得重新执行迁移命令同步数据库:

    python manage.py makemigrations
    python manage.py migrate
    
  • 检查对象创建代码
    不管是在Django Shell、视图还是admin后台创建问题,都必须给question_text赋值:

    • 比如在Shell里创建的正确写法:
      from django.utils import timezone
      from polls.models import Question
      
      q = Question(question_text="你的周末计划是什么?", pub_date=timezone.now())
      q.save()
      
    • 如果是在admin后台操作,确保保存时填写了question_text字段——默认admin会把必填字段标红,没填就点保存肯定会触发这个错误。
  • 提前验证模型数据
    不确定问题出在哪的话,用full_clean()方法提前做模型验证,不用等到save()才报错:

    q = Question(pub_date=timezone.now())
    q.full_clean()  # 这里会直接抛出验证错误,提示question_text不能为空
    

内容的提问来源于stack exchange,提问作者Sérgio Lima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:29:57