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

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的管理命令,它会自动处理环境初始化,避免加载顺序问题:

  1. 在parser_app下创建目录结构:

    parser_app/
      management/
        __init__.py
        commands/
          __init__.py
          create_cron_templates.py
    
  2. 编写自定义命令代码:

    # 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('定时任务模板创建成功'))
    
  3. 修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:56:11