假设我有以下模型
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
,上述查询是进行 3 次数据库调用还是仅进行 2 次(select_related for bar
from prop
)与 bar
相关联如果需要 3 次调用,有没有办法通过对
bar -> prop
使用 selected_related 来实现 2 次调用
最佳答案
您可以使用 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
加入同一查询的对象.
关于Django 链接 prefetch_related 和 select_related,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54569384/