【发布时间】:2017-05-19 09:44:16
【问题描述】:
我有以下两个带注释的查询集,它们是通过从数据集中提取this_wk 和prev_wk 分别生成的,然后执行注释。我想在归还它们之前将它们合并在一起。
data = {
'this_wk': QuerySet([{'this_total': 3, 'dept': 2},
{'this_total': 2, 'dept': 1},
{'this_total': 1, 'dept': 3}]),
'prev_wk': QuerySet([{'prev_total': 2, 'dept': 3}])}
预期:
QuerySet([{'this_total': 3, 'prev_total': None, 'dept': 2},
{'this_total': 2, 'prev_total': None, 'dept': 1},
{'this_total': 1, 'prev_total': 2, 'dept': 3}]),
或者,有没有办法直接聚合它,以便我直接从一组带有日期字段的项目中获取?以下是我目前生成两个 QuerySet 的方式:
previous_items = Widget.objects.filter(start__gte=prev_start).filter(start__lte=prev_end)
prev_ranking = previous_items.values('dept').annotate(prev_total=Count('dept'))
this_items = Widget.objects.filter(start__gte=this_start
).filter(start__lte=this_end)
this_ranking = this_items.values('dept'
).annotate(this_total=Count('dept')
).order_by('-this_total')
有没有办法将这两个注释链接在一起,以便我最终得到一个单独的 QuerySet,根据本周使用的 Dept 对每个 Dept 进行分组和排名,但还添加了一个字段这表示前一周使用了多少Widgets?
我在想这样的事情:
items = Widget.objects.filter(start__gte=prev_start
).filter(start__lte=this_end
).annotate(prev_total=Count('dept') # can I restrict this to the previous week?
).annotate(this_total=Count('dept') # can I restrict this to the current week?
).order_by('-this_total')
【问题讨论】:
标签: python django aggregate-functions