在Django的循环导入中,我可以用任何方式在models.py文件中使用myModel = apps.get_model('app_name', 'model_name')
来获取模型对象吗?
我知道我可以使用models.ForeignKey('app.model',....)
但是就我而言,我正在models.py中查询自定义功能。因此,我需要抓住模型对象。也不能以正常方式导入它,因为已经在其他文件中导入了此文件类。因此必须是循环导入。
此代码myModel = apps.get_model('app_name', 'model_name')
在views.py上可以正常使用,而在models.py中则不能。由于根据django,所有的models.py都会在settings.py之后以及该视图和其他视图之后被调用。因此,在尝试在models.py中使用get_model
时出现此错误
文件“ /home/mypc/.virtualenvs/VSkillza/lib/python3.6/site-packages/django/apps/registry.py”,第132行,在check_models_ready中 引发AppRegistryNotReady(“尚未加载模型。”) django.core.exceptions.AppRegistryNotReady:模型尚未加载。
预先感谢:)
答案 0 :(得分:2)
您可以通过在自定义函数内移动导入来中断循环导入。这样,当函数运行时就加载模型,而不是在模块加载时加载。
def my_function():
from myapp.models import MyModel
循环导入表明您的代码结构不正确,但是由于您没有显示代码,因此我们无法提供任何建议。
答案 1 :(得分:1)
您可以尝试一下。
import importlib
mymodels = importlib.import_module("app.models")
mymodels.YourModel
#query
mymodels.YourModel.objects.all()