gpt4 book ai didi

django - 具有多级反向查找的预取对象

转载 作者:行者123 更新时间:2023-12-01 15:13:55 25 4
gpt4 key购买 nike

我使用的是 Django 1.7,并且一直在使用新的 Prefetch 对象,这是一个很好的补充。然而,当我需要遍历不止一种关系时,我似乎陷入了困境。这是我的代码:

    product_types = self.get_queryset().select_related().prefetch_related(
'excise_category__exciseitem_set__unit',
Prefetch(
'bevtank_set__package_set__checkout_set',
queryset=CheckOut.objects.filter(
create_date__lte=end_date,
submission__isnull=True,
exempt=False),
to_attr='checkouts_due'
)
)
...
for pt in product_types:
...
co = pt.checkouts_due
...

这给我一个'ProductType'对象在co = pt.checkouts_due上没有属性'checkouts_due'。如果我将查找减少为单个反向查找(出于调试目的),它就可以正常工作。

所以要么我的代码有问题,要么预取有限制。谁能解释一下这里可能发生的事情吗?

谢谢内森

最佳答案

由于您要抓取三层深度的预取数据,因此该属性将存在于最后一层之前的层上。这意味着您必须执行类似的操作才能访问它:

bevtank_set__package_set__checkout_set
for pt in product_types:
for bevtank in pt.bevtank_set.all():
for package in bevtank.package_set.all():
co = package.checkouts_due

Django 不会将跨多个关系的预取合并到原始查询模型上的单个属性中。您必须深入查找与您最终想要的模型具有多对多或反向 FK 关系的属性。

关于django - 具有多级反向查找的预取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29358729/

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