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

Django新增gradingmodel后运行makemigrations报quiz_gradingmodel不存在错误

根因定位

从报错栈可以直接定位问题:Django运行所有管理命令(包括makemigrations)前,会先执行所有已注册App的ready()钩子方法。你在quiz/apps.py第16行的ready()方法中直接遍历了model_to_deploy这个QuerySet,触发了数据库查询,此时你已经清空了数据库,gradingmodel对应的表还未通过迁移生成,因此直接抛出不存在表的报错。
当你注释掉新增的gradingmodel后,ready()方法的查询逻辑不会涉及到不存在的表,因此makemigrations可以正常运行。

临时解决步骤
  • 先注释掉quiz/apps.py中ready()方法内所有涉及数据库读写的代码,包括本次触发报错的model_to_deploy遍历逻辑
  • 执行python manage.py makemigrations quiz生成gradingmodel对应的迁移文件
  • 执行python manage.py migrate完成迁移,在数据库中生成quiz_gradingmodel表
  • 恢复之前注释的ready()方法代码,后续执行Django管理命令就不会再触发该报错
长期优化方案

如果你的ready()方法必须保留数据库查询逻辑,可以增加表存在性判断,避免迁移执行前的初始化阶段报错:

from django.db import connections, OperationalError

def ready(self):
    # 先校验目标表是否存在
    try:
        table_list = connections['default'].introspection.table_names()
    except OperationalError:
        # 数据库未初始化的情况下直接跳过查询逻辑
        return
    if 'quiz_gradingmodel' not in table_list:
        return
    # 以下放原有业务逻辑
    for model in model_to_deploy:
        # 原有代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:36:00