2

考虑到这个模型和数据:

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 自动对模型中的每个字段进行分组,所以分组并没有真正起作用(因为每一行都是唯一的)。

我已经检查过的解决方案:


我知道可以做这样的事情:

Ad.objects.values('ad_id').annotate(clicks_sum=Sum('clicks'))

但它并不好,因为它不返回广告模型,而是一个字典。

我也不能使用原始 SQL,因为它不是链式的

我也尝试设置

MyQuerySet.group_by = ['ad_id']

也不行。。

所以我真的只需要按我需要的字段进行分组,结果将是一个广告模型。

4

1 回答 1

2

您可以使用 执行原始 SQL 查询Manager.raw(),在您的情况下是:

Ad.objects.raw('select Ad_id, date, sum(clicks) from ads group by Ad_id')

此方法方法接受原始 SQL 查询,执行它并返回一个RawQuerySet实例。这个RawQuerySet实例可以像普通一样被迭代QuerySet以提供对象实例。

于 2012-11-08T17:14:02.527 回答