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会把必填字段标红,没填就点保存肯定会触发这个错误。
- 比如在Shell里创建的正确写法:
提前验证模型数据
不确定问题出在哪的话,用full_clean()方法提前做模型验证,不用等到save()才报错:q = Question(pub_date=timezone.now()) q.full_clean() # 这里会直接抛出验证错误,提示question_text不能为空
内容的提问来源于stack exchange,提问作者Sérgio Lima
相关产品推荐
相关产品推荐

