Django启动时执行创建对象函数报错AppRegistryNotReady
问题原因
报错的核心是在Django应用未完成加载前,就导入了依赖模型的模块。你当前在wsgi.py开头就导入了create_cron_templates,而该模块会直接加载parser_app的模型,此时Django的应用注册表还未初始化完成,触发AppRegistryNotReady错误。
修复方案
方案1:调整导入时机(快速修复)
将create_cron_templates的导入语句移到get_wsgi_application()执行之后,确保Django已完成应用加载:
修改后的wsgi.py代码:
# project/core_app/wsgi.py import os from django.core.wsgi import get_wsgi_application from django.core.management import call_command os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core_app.settings') # 初始化Django应用环境 application = get_wsgi_application() call_command("migrate") call_command("collectstatic", interactive=False) # 此时应用已加载,再导入并执行初始化函数 from scripts.create_schedules import create_cron_templates create_cron_templates()
方案2:使用Django自定义管理命令(规范做法)
对于初始化逻辑,更推荐用Django的管理命令,它会自动处理环境初始化,避免加载顺序问题:
在
parser_app下创建目录结构:parser_app/ management/ __init__.py commands/ __init__.py create_cron_templates.py编写自定义命令代码:
# parser_app/management/commands/create_cron_templates.py from django.core.management.base import BaseCommand from parser_app.models import Schedule class Command(BaseCommand): help = '创建初始定时任务模板' def handle(self, *args, **options): Schedule.objects.get_or_create( name="1", cron="0 9-18/3 * * 1-5#0 19-23/2,0-8/2 * * 1-5#0 */5 * * 6-7" ) self.stdout.write(self.style.SUCCESS('定时任务模板创建成功'))修改
wsgi.py调用该命令:# project/core_app/wsgi.py import os from django.core.wsgi import get_wsgi_application from django.core.management import call_command os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core_app.settings') application = get_wsgi_application() call_command("migrate") call_command("collectstatic", interactive=False) # 调用自定义管理命令 call_command("create_cron_templates")
额外检查
确保parser_app已添加到settings.py的INSTALLED_APPS中:
# core_app/settings.py INSTALLED_APPS = [ # 其他应用 'parser_app', ]
内容的提问来源于stack exchange,提问作者mascai
相关产品推荐
相关产品推荐

