Django按月统计订单总数问题:重复分组结果修正
解决Django按月统计订单总数重复的问题
问题根源
你的CartOrder模型中vendor是多对多字段,执行查询时Django会关联多对多表返回数据,同一个订单会因关联多个vendor被多次输出,导致分组统计时同一月份的订单被拆分成多条记录。
修复方案
在统计时给Count添加distinct=True参数,统计唯一的订单ID:
修改后的views.py代码:
import calendar from django.db.models.functions import ExtractMonth from django.db.models import Count orders = CartOrder.objects.annotate(month=ExtractMonth('date')).values('month').annotate(count=Count('id', distinct=True)).values('month','count') print(orders)
也可以先通过distinct()获取唯一订单记录,再做分组统计:
orders = CartOrder.objects.distinct().annotate(month=ExtractMonth('date')).values('month').annotate(count=Count('id')).values('month','count')
说明
Count('id', distinct=True)会忽略重复的订单ID,确保每个订单只被统计一次,避免多对多关联带来的重复计数。distinct()先去重订单记录,再分组统计,同样能避免重复数据干扰统计结果。
内容的提问来源于stack exchange,提问作者Destiny Franks
相关产品推荐
相关产品推荐

