【发布时间】:2023-03-13 19:34:02
【问题描述】:
我有一个复杂的查询,虽然它很容易在 python 代码中完成,但我正在尝试通过 Django Querysets 来完成。
使用来自https://docs.djangoproject.com/en/2.2/topics/db/aggregation/#aggregating-annotations 的示例模型,我要做的是用每位作者的总销售额的平均值来注释每个发布者。但是,每位作者的总销售额应仅包括给定日期范围内的书籍。
有没有办法在一个查询中做到这一点?当然,使用纯 Python 执行两个单独的查询并连接结果是可行的。但是,在我的特定用例中,每个数据库连接/断开连接都会产生大量开销,因此最好将它们组合到一个查询中。此外,真实数据集非常大,因此在服务器端完成聚合至关重要。
这是我期望的 json 输出示例:
{
"publishers": [{
"name": "testpublisher",
"avg_recent_sales": "11.2"
}, {
"name": "anotherpublisher",
"avg_recent_sales": "2.4"
}]
}
其中avg_recent_sales 是过去 6 个月内每位作者通过该出版商销售的平均图书数量。
【问题讨论】:
-
先过滤。
Book.objects.filter(publication_date__lt=last_date).annotate(...).aggregate(...)
标签: python django python-3.x django-models