Pro*_*eus 7 python django django-models
在Django中,您可以为模型创建管理器.我这样做是通过managers.py在我的模型中添加一个名为和的新文件objects = MyManager().
为了停止循环进口,我做了self.model.但是,如果我需要在我的经理中引用不同的模型,即
from models import SecondModel
second= SecondModel(name=test).save()
self.model(second=second)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误: ImportError: cannot import name SecondModel
那么在Django中是否有一种懒惰加载模型的方法?
Sat*_*nix 20
从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')
Run Code Online (Sandbox Code Playgroud)
你有几个选择:
Django有一个实用程序函数,用于按字符串名称导入,因此您无需自行导入.有几种方法可用于此(请参阅此问题:Django:从字符串中获取模型?)
from django.db.models.loading import get_model
class SomeModelManager(...):
...
def some_function(self):
model = get_model('your_app', 'YourModel')
object = model()
Run Code Online (Sandbox Code Playgroud)
在managers.py文件底部添加导入,并确保只导入模块而不是模型本身.
所以...
models.py:
import managers
class SomeModel(models.Model):
...
objects = managers.SomeModelManager()
Run Code Online (Sandbox Code Playgroud)
managers.py
class SomeModelManager(...):
...
def some_function(self):
object = models.SomeOtherModel()
import models
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4402 次 |
| 最近记录: |