我的Django应用程序中有一个名为helpers.py
的脚本,我无法导入模型,因为它会创建一个循环引用。
作为解决此问题的方法,我尝试在脚本中动态加载模块,如下所示:
from django.apps import apps
MyModel=apps.get_model("mymodule", "MyModel")
但是在Django加载模型并抛出错误之前会调用它。
有解决这个问题的方法吗?
理想情况下,我需要能够在Django初始化模型后创建对模型的引用,以便它在整个脚本中可用,但我不确定这是否可行。
答案 0 :(得分:2)
您确定需要helpers.py
内的模型吗?如果需要的东西与模型相关,请考虑将其实现为模型方法或自定义管理器。
如果您确定需要helpers.py
中的模型,请查看以下示例。
正如@Selcuk所提到的,您可以在helpers.py
的函数中尝试本地导入。即使helpers.py
中导入了models.py
,此示例也可以:
# helpers.py
def foo():
from .models import MyModel
# do something with MyModel
在helpers.py
的{{1}}循环导入models.py
的顶部,您可以导入整个models
模块,而无需指定要从中导入的名称。所以下一个示例也可以:
# helpers.py
import myapp.models
def foo():
# do something with myapp.models.MyModel
但是下一个不起作用,因为我们从模块中指定了名称(可能尚未定义):
# helpers.py
from .models import MyModel
# ImportError is risen when you import a name from the module which has a circular import of this module
def foo():
# do something with MyModel
这也不起作用。它将导入模块,但是当您尝试访问名称MyModel时,您将获得NameError:
# helpers.py
from .models import *
def foo():
# do something with MyModel
# NameError is risen when you do something with MyModel here