【问题标题】:Filtering related fields in django's annotate() feature过滤 django 的 annotate() 功能中的相关字段
【发布时间】:2011-04-23 12:45:06
【问题描述】:

Django 文档基于 QuerySet 的相关字段(即在 annotate() 中使用连接)给出了 using annotate() to produce aggregate results 的示例。

文档中的一个简化示例是 Store.objects.annotate(min_price=Min('books__price')),其中 books 是 Store to Book 的 ManyToMany 字段,而 price 是 Book 的字段。

继续这个例子,我将如何生成一个带有注释的 Store 对象的 QuerySet,它不是针对商店中的所有书籍,而只是针对具有“author='William Shakespeare'”的书籍?也就是说,如何过滤用于计算聚合的相关字段?

【问题讨论】:

    标签: django


    【解决方案1】:

    The documentation 解释了如何做到这一点:

    Store.objects.filter(books__author='William Shakespeare').annotate(
                         min_price=Min('books__price'))
    

    正如该链接所述,过滤器和注释的顺序在这里很重要 - 因为您只想计算与注释中的过滤器匹配的书籍,所以过滤器必须排在第一位。

    【讨论】:

    • 哦,我明白了。这不仅会过滤掉没有莎士比亚书籍的商店,还会影响注释运行的书籍子集。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-11-10
    • 2018-12-30
    • 1970-01-01
    • 2013-10-30
    • 2019-01-15
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多