[英]Django prefetch_related from foreignkey with manytomanyfield not working
例如,在 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)
在这种情况下, C.objects.all().prefetch_related('z__b_set')
不起作用。
有没有办法预取我需要的信息c[0].z.b_set.all()
无需额外查询即可工作?
您可以使用select_related
批量跟踪关系的第一部分( Cz
的ForeignKey
):
C.objects.all().select_related('z').prefetch_related('z__b_set')
但是,如文档中所述, prefetch_related
部分将在至少两个查询中完成:
另一方面,prefetch_related 对每个关系进行单独的查找,并在 Python 中进行“连接”。 除了 select_related 支持的外键和一对一关系之外,这允许它预取使用 select_related 无法完成的多对多和多对一对象。 它还支持 GenericRelation 和 GenericForeignKey 的预取。
您应该在 B 中显式设置 related_name 并迁移:
class B(models.Model):
y = models.ManyToManyField(A, related_name="bs")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.