How to Lazy Load a model in a managers to stop circular imports?
在Django中,您可以为您的模型创建管理器。为此,我添加了一个名为
为了阻止循环进口,我做了
1 2 3 | from models import SecondModel second= SecondModel(name=test).save() self.model(second=second) |
我得到以下错误:
那么,Django有没有一种方法可以延迟加载模型?
从django 1.7开始,不推荐使用当前接受的答案;从这个答案开始,您可以这样修改代码。
1 2 3 4 5 6 7 | from django.apps import apps class SomeModelManager(...): ... def some_function(self): model = apps.get_model(app_label='your_app', model_name='YourModel') |
您有几个选择:
1。按名称导入Django有一个按字符串名称导入的实用程序函数,因此您不需要自己导入。有几种方法可用于此目的(请参阅此问题:django:get model from string?)
1 2 3 4 5 6 7 8 | from django.db.models.loading import get_model class SomeModelManager(...): ... def some_function(self): model = get_model('your_app', 'YourModel') object = model() |
2。底部进口
在
所以…
1 2 3 4 5 | import managers class SomeModel(models.Model): ... objects = managers.SomeModelManager() |
1 2 3 4 5 6 7 | class SomeModelManager(...): ... def some_function(self): object = models.SomeOtherModel() import models |