首页 > 解决方案 > Django:在models.py上使用apps.get_model获取模型

问题描述

关于 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 中引发 AppRegistryNotReady(“模型尚未加载。”) django .core.exceptions.AppRegistryNotReady:模型尚未加载。

提前致谢 :)

标签: pythondjango

解决方案


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

def my_function():
    from myapp.models import MyModel

循环导入表明您的代码结构不正确,但由于您没有显示,我们无法给您任何建议。


推荐阅读