如何根据过滤器对值求和并按年-月分组

时间:2018-07-27 02:35:13

标签: django django-models django-rest-framework django-queryset django-orm

我有下表:

2018-01-01 ------- 10
2018-01-15 ------- 20
2018-01-31 ------- 30
2018-02-01 ------- 10
2018-03-01 ------- 10
2018-03-20 ------- 20

我需要求和过滤的值

1-总和(值),其中日期<该月的第一天

2-总和(值),其中日期<月的最后一天

预期结果(类似):

[
 {'year-month': '2018-01'}, {'sum_before_month_day_one': 0}, {'sum_before_last_month_day': 60},
 {'year-month': '2018-02'}, {'sum_before_month_day_one': 60}, {'sum_before_last_month_day': 70},
 {'year-month': '2018-03'}, {'sum_before_month_day_one': 70}, {'sum_before_last_month_day': 100},
]

我在文档https://docs.djangoproject.com/en/2.0/topics/db/aggregation/#filtering-on-annotations

上发现了这一点

但是,我不知道通过自己的查询注释为Q提供args。

到目前为止,我设法对值求和并按月分组:

In [12]: result = Sale.objects \
    ...:     .annotate(date=TruncMonth('event_date')) \
    ...:     .values('date') \
    ...:     .annotate(quantity=Sum('quantity')) \
    ...:     .values('date', 'quantity') \
    ...:     .order_by('date')

In [13]: for i in result: print(i)

{'date': datetime.date(2018, 1, 1), 'quantity': 60.0}
{'date': datetime.date(2018, 2, 1), 'quantity': 10.0}
{'date': datetime.date(2018, 3, 1), 'quantity': 30.0}

0 个答案:

没有答案