Django:通过models.py

时间:2018-09-05 12:23:49

标签: python django

在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:模型尚未加载。

预先感谢:)

2 个答案:

答案 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()