我正在尝试将正在运行的SQL查询转换为Django ORM语句。
对于每个位置,我想根据每个日期+位置的所有活动的总和来检索最受欢迎的日期。
Django模特:
class Location(models.Model):
slug = models.SlugField(unique=True)
class Raw(models.Model):
location = models.ForeignKey('Location', related_name='raw')
activities = models.PositiveIntegerField(db_index=True)
date = models.DateField(db_index=True)
数据集:
date | activities | location_slug
------------+------------+-----------
2015-07-02 | 234 | london
2015-07-07 | 100 | london
2015-07-02 | 51 | london
2015-07-02 | 12 | melbourne
2015-07-02 | 111 | melbourne
2015-07-01 | 1234 | berlin
2015-07-01 | 12 | berlin
使用SQL。
SELECT DISTINCT ON (slug) date, slug, SUM(activities)
FROM core_raw, core_location
WHERE core_location.id = core_raw.location_id
GROUP BY date, slug
ORDER BY slug, sum DESC;
结果:
date | slug | sum
------------+-----------+------
2015-07-01 | berlin | 1246
2015-07-02 | london | 285
2015-07-02 | melbourne | 123
如何使用Django ORM执行此操作?它甚至可能吗?!
答案 0 :(得分:0)
这可以提供帮助。
from django.db.models import Sum
values = Raw.objects.all().values('location_slug','date').annotate(data_sum=Sum('activities')).distinct()