Django:在models.py 上使用apps.get_model 获取模型

she*_*n08 1 python django

关于 Django 的循环导入,他们有什么办法可以myModel = apps.get_model('app_name', 'model_name')在 models.py 文件中抓取模型对象吗?

我知道我可以使用 models.ForeignKey('app.model',....)

但就我而言,我正在 models.py 中查询自定义函数。所以我需要抓取模型对象。也不能以正常方式导入它,因为已经在另一个文件中导入了这个文件类。所以一定是循环导入。

这段代码myModel = apps.get_model('app_name', 'model_name')在 views.py 上运行良好,但在 models.py 中不行。由于根据 django 所有 models.py 在 settings.py 之后被调用,然后在视图和其他之后调用。所以在尝试使用get_model内部 models.py 时出现此错误

文件“/home/mypc/.virtualenvs/VSkillza/lib/python3.6/site-packages/django/apps/registry.py”,第132行,在check_models_ready raise AppRegistryNotReady(“模型尚未加载。”) django .core.exceptions.AppRegistryNotReady:模型尚未加载。

提前致谢 :)

Ala*_*air 5

您可以通过在自定义函数内移动导入来打破循环导入。这样,模型在函数运行时加载,而不是在模块加载时加载。

def my_function():
    from myapp.models import MyModel
Run Code Online (Sandbox Code Playgroud)

循环导入表明您的代码结构不正确,但我们无法为您提供任何建议,因为您尚未显示它。