Django TemplateView 按月统计条目未聚合 CreateView中相同代码正常运行
问题原因
聚合失效和视图继承类型无关,属于Django ORM分组查询的常见问题:若Item模型的Meta类配置了ordering默认排序规则,Django会自动将排序字段加入GROUP BY子句,破坏原本仅按月份分组的逻辑,导致每个条目被单独拆分为分组,所有统计值均为1。此外Item模型包含assigned_to多对多字段,关联查询产生的重复行也会干扰统计结果。
测试项目的Movie模型未配置默认排序规则,因此不会出现分组字段被额外追加的问题,统计逻辑正常。
解决方案
修改主项目views.py中的统计查询逻辑,主动覆盖默认排序、对计数去重即可:
context['per_month'] = Item.objects.annotate( month=TruncMonth('date_posted') ).values('month').annotate( c=Count('id', distinct=True) ).values('month', 'c').order_by('month')
修改完成后运行即可得到按月聚合的正确统计结果。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

