如何解决Django models.py调用模型触发AppRegistryNotReady报错
报错原因
你把数据库查询代码直接写在了models.py的模块顶层,Django加载模型文件时还没有完成所有应用模型的注册,此时执行ORM查询就会触发AppRegistryNotReady错误。你之前配置的ready()方法只导入了模型,没有把查询逻辑迁移进去,所以配置不生效。
解决方案
步骤1:删除models.py顶层的查询代码
删除models.py第455行及所有写在全局作用域的ORM查询代码,不要在模型文件的顶层执行任何数据库操作。
步骤2:将查询逻辑放到ready()方法中
所有Django启动阶段需要执行的初始化操作都要放在AppConfig的ready()方法内执行,修改后的配置代码如下:
from django.apps import AppConfig class SlackApplicationConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'slack_application' def ready(self): from .models import SlackAccountMatching, SlackNotifications # 在这里执行你的查询逻辑 notify_time_queryset = SlackNotifications.objects.filter(organization_id=1).values('slack_notification_time') # 后续使用查询结果的初始化逻辑也全部放在此处
步骤3:确认应用注册配置正确
打开项目settings.py,检查INSTALLED_APPS中注册的slack_application是指向你自定义的AppConfig全路径,而非默认包名:
INSTALLED_APPS = [ # 其余应用配置 'slack_application.apps.SlackApplicationConfig', ]
额外说明
如果你的查询逻辑不属于启动初始化场景,是业务流程中的操作,直接将查询逻辑写在对应的视图函数、定时任务、或者其他业务方法中即可,不需要放在ready()方法里,只要不在models.py顶层执行就不会触发该错误。
内容的提问来源于stack exchange,提问作者manfredobelugo
相关产品推荐
相关产品推荐

