检索查询集中 objects 的所有相关 objects

Retrieve all related objects of objects in a queryset

昨天问了另一个 question。不幸的是,答案并没有解决问题,所以我想我缩小问题范围再问一次。

我有一个分层的类别模型(使用 django-treebeard)。当我 运行 example_category.get_descendants() 我得到的结果是 MP_NodeQuerySet 如下

<MP_NodeQuerySet [<Category: shoes>, <Category: Sneakers>, <Category: laced_sneakers>]>

在此查询集中,我想获取与每个类别相关的每个产品并显示在视图 (DetailView) 中。

我最好的选择是

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)

        context["products_in_category"] = Category.objects.prefetch_related(
            Prefetch("products", queryset=self.object.get_descendants()))

    return context

导致错误

“无法将关键字 'category' 解析为字段。选择包括:深度、描述、id、numchild、路径、产品、slug、标题”

我想我出于某种原因找回了类别而不是它的产品,我真的不知道如何解决它。

查看旧版 question 了解更多背景信息或直接提问!

即使有效,该查询也会 return 类别实例的查询集。

要获取属于 get_descendants 类别之一的产品,您可以这样做

from django.db.models import Subquery

categories = example_category.get_descendants()
Product.objects.filter(category__in=Subquery(categories.values("id"))

不需要使用 Subquery,但这是一个很好的优化,可以节省您的数据库查询。

您可以阅读更多内容here