r4v*_*4v1 5 django django-models django-queryset django-managers django-rest-framework
例如,我有模型,
class ModelBManager(models.Manager):
def get_queryset(self):
return self.super().get_queryset().select_related('y')
class ModelA(models.Model):
x = models.TextField()
class ModelB(models.Model):
y = models.ForeignKey(ModelA)
objects = ModelBManager()
class ModelC(models.Model):
z = models.ForeignKey(ModelB)
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做,ModelC.objects.get(id=1).z我将获得ModelB带有预取ModelA实例(ModelBManager工作)的实例。
但是,如果我这样做ModelC.objects.select_related('z')[0].z,则不会有ModelA带有ModelB实例的预取实例。(基本上ModelBManager不起作用!)
任何人都知道我该如何实现这一目标?
谢谢
select_related允许使用跨度获取更深层次的关系。
在你的情况下你应该使用ModelC.objects.select_related('z__y').first().z.y.
| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |