You need to enable JavaScript to run this app. 如何解决Django models.py调用模型触发AppRegistryNotReady报错
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 20:15:05