You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django QuerySet使用order_by导致聚合结果拆分的问题求助

Django QuerySet聚合排序避免分组拆分的解决方案

问题根源在于你用了order_by('-quantity'),这里的quantity是OrderedProduct表的原始字段,不是你聚合生成的qty别名。Django的QuerySet规则是:如果order_by中包含了不在values指定分组字段里的字段,会自动把这个字段加入分组依据,直接导致原本按product__product_name合并的结果被拆分。

解决方法很简单,把排序字段改成聚合后的别名qty即可,同时保持values在前、annotate在后的顺序(这个顺序决定了分组的依据是values里的字段):

top_10_ordered_products = OrderedProduct.objects.filter(
    order__in=current_month_orders, 
    vendor=vendor
).values('product__product_name').annotate(
    qty=Sum('quantity')
).order_by('-qty')[:10]

这样排序时基于的是每个产品的总销量qty,不会引入原始字段干扰分组,就能保留按产品名称合并的聚合结果,同时按销量从高到低排序,最后用[:10]直接取出销量前十的产品。

内容的提问来源于stack exchange,提问作者RMCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 11:14:59