在Django中,您可以为模型创建管理器。我这样做是通过添加一个名为managers.py
的新文件并在我的模型中objects = MyManager()
。
要停止循环导入,请执行self.model
。但是,如果我需要在我的经理中引用不同的模型,即
from models import SecondModel
second= SecondModel(name=test).save()
self.model(second=second)
我收到以下错误:ImportError: cannot import name SecondModel
那么在Django中有一种延迟加载模型的方法吗?
答案 0 :(得分:18)
从Django 1.7开始,目前接受的答案已被弃用;从this answer开始,您可以像这样修改代码。
from django.apps import apps
class SomeModelManager(...):
...
def some_function(self):
model = apps.get_model(app_label='your_app', model_name='YourModel')
答案 1 :(得分:6)
您有几个选择:
Django有一个实用程序函数,用于按字符串名称导入,因此您无需自行导入。有几种方法可用于此(请参阅此问题:Django: Get model from string?)
from django.db.models.loading import get_model
class SomeModelManager(...):
...
def some_function(self):
model = get_model('your_app', 'YourModel')
object = model()
在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