Django教程Part2报no such table: polls_question错误排查
问题原因
报错来自三类问题:
- 执行迁移命令时polls应用未被Django正确识别,导致
polls_question表根本没被创建,触发初始的「表不存在」错误 - 手动创建数据库表的操作不符合Django ORM的表结构规范,缺失模型定义的字段,触发后续的「字段不存在」错误
models.py存在语法缩进错误:Question模型的__str__方法被定义在了类外部,不属于类方法,后续模型使用会触发异常。
修复步骤
按顺序操作即可解决:
- 修正
models.py的缩进错误,确保__str__方法属于Question类,修正后代码如下:from django.db import models class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') def __str__(self): return self.question_text class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0) def __str__(self): return self.choice_text - 确认应用注册配置:打开
mysite/settings.py,找到INSTALLED_APPS列表,确保其中包含'polls.apps.PollsConfig'配置项,缺失则补上。没有这行配置Django不会识别polls下的模型,所有迁移操作都不会生效。 - 清理错误的历史文件:删除项目根目录下手动修改过的
db.sqlite3文件,再删除polls/migrations/目录下除__init__.py之外的所有残留文件。 - 重新执行迁移:在
manage.py所在的项目根目录,激活你使用的django3虚拟环境,依次执行以下命令:python manage.py makemigrations polls python manage.py migrate
执行完成后进入shell测试Question.objects.all()即可正常运行。
注意:Django的迁移系统会自动维护表结构、字段类型、约束、外键关联,不要手动修改ORM映射的数据库表,否则极易出现结构不匹配的错误。
内容的提问来源于stack exchange,提问作者Vanessa Pires de Almeida
相关产品推荐
相关产品推荐

