Sem*_*Sem 4 python django postgresql
例如,在 Django 1.8 中:
class A(models.Model):
x = models.BooleanField(default=True)
class B(models.Model):
y = models.ManyToManyField(A)
class C(models.Model):
z = models.ForeignKey(A)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,C.objects.all().prefetch_related('z__b_set')不起作用。
有没有办法在c[0].z.b_set.all()没有额外查询的情况下预取我需要的信息?
您可以使用在一个批次中select_related跟踪关系的第一部分 ( C.z's ForeignKey):
C.objects.all().select_related('z').prefetch_related('z__b_set')
Run Code Online (Sandbox Code Playgroud)
prefetch_related但是,该部分将在至少两个查询中完成,如文档中所述:
另一方面,prefetch_related 对每个关系进行单独的查找,并在 Python 中进行“连接”。除了 select_related 支持的外键和一对一关系之外,这允许它预取使用 select_related 无法完成的多对多和多对一对象。它还支持 GenericRelation 和 GenericForeignKey 的预取。
| 归档时间: |
|
| 查看次数: |
5463 次 |
| 最近记录: |