__init__.py中的自定义函数导致 Django 应用程序尚未安装错误



我有一个像下面这样的设置

Tasks
|__ __init__.py
|__ a.py
|__ b.py
|__ c.py
...

在__init__.py文件中,

from .a import custom1, custom2
from .b import custom3, custom4

我在Tasks中写了一个函数,它要求将Tasks添加为INSTALLED_APP。

自定义函数会引发django.core.exceptions.AppRegistryNotReady: "Apps are not loaded yet."

回溯到一个自定义函数试图导入

的点。from django.contrib.auth.models import User.

为什么会发生这种情况,有没有一种方法来修复这个错误而不移动自定义函数的__init__.py文件?

Django初始化的顺序有很好的文档

1)。首先,Django会导入INSTALLED_APPS中的每个项。

在这个阶段,你的代码不应该导入任何模型!

3)。最后,Django运行每个应用配置的ready()方法。

进一步如AppConfig.ready()

所述

子类可以覆盖这个方法来执行初始化任务比如注册信号。它会在注册表完成时被调用完全填充。

class RockNRollConfig(AppConfig):
# ...
def ready(self):
# importing model classes
from .models import MyModel  # or...
MyModel = self.get_model('MyModel')
# registering signals with the model's string label
pre_save.connect(receiver, sender='app_label.MyModel')

你可以考虑在你的函数中使用get_model,用require_ready代替import

但我不确定它是否会工作取决于你的用例

相关内容

最新更新