考虑到这个型号&数据:
Ad_id +日期=主键
Ad_id date clicks
------------------------------
3 8/10/12 124
3 7/10/12 433
3 6/10/12 99
4 8/10/12 23
4 7/10/12 80
我正在尝试按ad_id进行分组,以返回所有点击次数的总和。
用sql术语:
select Ad_id, date, sum(clicks) from ads group by Ad_id
问题是Django会自动为模型中的每个字段执行group by,因此group by并不真正起作用(因为每一行都是唯一的)。
我已经检查过的解决方案:
我知道可以这样做:
Ad.objects.values('ad_id').annotate(clicks_sum=Sum('clicks'))
但它并不好,因为它不会返回广告模型,而是返回字典。
我也不能使用原始SQL,因为它不可链接
我也尝试设置
MyQuerySet.group_by = ['ad_id']
也不行......
所以我真的需要按照我需要的字段进行分组,结果将是广告模型。
答案 0 :(得分:2)
您可以使用Manager.raw()
执行原始SQL查询,例如:
Ad.objects.raw('select Ad_id, date, sum(clicks) from ads group by Ad_id')
此方法方法接受原始SQL查询,执行它并返回RawQuerySet
实例。这个RawQuerySet
实例可以像普通QuerySet
一样进行迭代,以提供对象实例。