gpt4 book ai didi

Django 链接 prefetch_related 和 select_related

转载 作者:行者123 更新时间:2023-12-03 16:13:54 30 4
gpt4 key购买 nike

假设我有以下模型

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com