gpt4 book ai didi

使用多重查找时 Django Prefetch related_name 不可见

转载 作者:搜寻专家 更新时间:2023-10-30 20:22:59 26 4
gpt4 key购买 nike

当我在多个字段上使用 django Prefetch 对象 ( https://docs.djangoproject.com/en/2.2/ref/models/querysets/#prefetch-objects) 时:

model_a.objects.prefetch_related(Prefetch(model_b__model_c), to_attr='data')

其中 model_a 与 model_b 具有 m2m 关系,而 model_c 具有 model_b 的外键。我似乎没有在返回的 QuerySet 的元素上获得“数据”字段。

我是不是找错地方了?

最佳答案

首先,根据您描述的关系,Prefetch 对象需要像这样构造(除非您为关系定义了一个related_name,在在这种情况下,您需要相关名称而不附加 _set):

Prefetch('model_b_set__model_c_set')

其次,您实际上在进行两次预取:

  • 第一个获取每个 model_a 的所有 model_b 实例。
  • 第二个获取每个 model_b 的所有 model_c 实例。

data 是为第二次预取定义的,即。在 model_b 实例上,而不是在 model_a 上,它将包含一个 model_c 实例列表。所以你会像这样访问它:

a_models = ModelA.objects.prefetch_related(
Prefetch('model_b_set__model_c_set'),
to_attr='data')
for a in a_models:
for b in a.model_b_set.all():
b.data # => contains a list of model_c instances

关于使用多重查找时 Django Prefetch related_name 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54973908/

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