Python 如何在管理器中延迟加载模型以停止循环导入?
在Django中,您可以为模型创建管理器。为此,我添加了一个名为Python 如何在管理器中延迟加载模型以停止循环导入?,python,django,django-models,Python,Django,Django Models,在Django中,您可以为模型创建管理器。为此,我添加了一个名为managers.py的新文件,并在我的模型中添加了objects=MyManager() 要停止循环导入,请执行self.model。但是,如果我需要在我的经理中引用不同的模型,即 from models import SecondModel second= SecondModel(name=test).save() self.model(second=second) 我收到以下错误:ImportError:无法导入名称Seco
managers.py
的新文件,并在我的模型中添加了objects=MyManager()
要停止循环导入,请执行self.model
。但是,如果我需要在我的经理中引用不同的模型,即
from models import SecondModel
second= SecondModel(name=test).save()
self.model(second=second)
我收到以下错误:ImportError:无法导入名称SecondModel
那么在Django中有没有办法延迟加载模型呢?您有几个选项: 1.按名称导入 Django有一个用于按字符串名称导入的实用函数,因此您无需自行导入。有几种方法可用于此(请参见此问题:) 2.底部进口 在
managers.py
文件的底部添加导入,确保只导入模块,而不是模型本身
所以
models.py
:
import managers
class SomeModel(models.Model):
...
objects = managers.SomeModelManager()
managers.py
class SomeModelManager(...):
...
def some_function(self):
object = models.SomeOtherModel()
import models
从Django 1.7开始,当前接受的答案已被弃用;从中,您可以像这样修改代码
from django.apps import apps
class SomeModelManager(...):
...
def some_function(self):
model = apps.get_model(app_label='your_app', model_name='YourModel')
Django没有惰性导入吗?我总是被告知页面底部的导入是不好的@OrbiterFleet:是的,我添加了这个选项作为替代选项:)
get\u model
perfect!ThanksHow我是否导入包含来自模型的选项的枚举对象?@МааааПаааааааааааааааа?i、 e.def一些函数(self)->您的模型:
from django.apps import apps
class SomeModelManager(...):
...
def some_function(self):
model = apps.get_model(app_label='your_app', model_name='YourModel')