假设我有以下型号
class Foo(models.Model):
...
class Prop(models.Model):
...
class Bar(models.Model):
foo: models.ForeignKey(Foo, related_name='bars', ...)
prop: models.ForeignKey(Prop, ...)
现在我要进行以下查询。
foos = Foo.objects.prefetch_related('bars__prop').all()
假设只有一个prop
与bar
相关联,上述查询是否进行3次数据库调用或仅进行2次(与prop
中bar
的select_related)
如果需要接听3个电话,是否可以通过对bar -> prop
使用selected_related来使其接听2个电话
答案 0 :(得分:0)
您可以使用Prefetch
类来指定prefetch_related()
中使用的查询集,并将其与select_related()
结合使用:
from django.db.models import Prefetch
bars = Bar.objects.select_related('prop')
foos = Foo.objects.prefetch_related(Prefetch('bars', queryset=bars)).all()
请注意,这应该是两个查询,一个用于Foo
对象,一个用于获取相关的Bar
对象,这些对象在同一查询中使用Prop
进行连接。