1. 问题现象与背景分析
这个报错通常出现在Django项目启动或运行时,控制台会抛出类似以下的错误栈:
code复制File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
...
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
这个错误的核心是Django的应用注册表(AppRegistry)尚未完成初始化,但代码中已经尝试访问模型(Model)类。这种情况多发生在:
- 项目启动时的模块加载顺序问题
- 循环导入导致的初始化顺序异常
- 在Django应用完全启动前就执行了模型相关操作
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 问题根源深度解析
2.1 Django应用加载机制
Django启动时遵循严格的初始化顺序:
- 设置环境变量(DJANGO_SETTINGS_MODULE)
- 加载settings.py配置
- 初始化应用注册表
- 加载各应用的models.py
- 完成数据库连接
如果在第3步完成前就尝试访问模型类,就会触发AppRegistryNotReady异常。
2.2 典型触发场景
- ASGI/WSGI配置不当:如示例中asgi.py过早导入路由模块
- 自定义命令/脚本:在manage.py外直接运行涉及模型的代码
- 信号处理器注册:在模块级别(@receiver)而非应用配置的ready()方法中注册
- 测试用例设置:在setUpClass中错误地访问模型
3. 解决方案与实操步骤
3.1 ASGI/WSGI配置修正
对于使用Channels/Daphne的项目,正确的asgi.py配置应该是:
python复制import os
from django.core.asgi import get_asgi_application
# 必须先设置环境变量并初始化Django应用
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django_asgi_app =
