我有一个像下面这样的设置
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
但我不确定它是否会工作取决于你的用例