gpt4 book ai didi

python - 如何按日期过滤以从 QuerySet 中获取本周与前一周的计数?

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:51 25 4
gpt4 key购买 nike

我有以下两个带注释的查询集,它们是通过从数据集中提取 this_wkprev_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}]),

或者,是否有一种方法可以直接聚合它,以便我直接从一组带有日期字段的项目中获取?以下是我目前生成两个查询集的方式:

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,根据使用的 Widgets 的数量,为每个 Dept 分组和排名本周之前,还添加了一个字段,说明上周使用了多少个 Widget

我是这样想的:

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')

最佳答案

检查条件聚合:

https://docs.djangoproject.com/en/1.10/ref/models/conditional-expressions/#conditional-aggregation

items = (Widget.objects.filter(start__range=(prev_start, this_end))
.values('dept')
.annotate(prev_total=Count(Case(When(start__lte=prev_end, then='dept'), output_field=IntegerField())),
this_total=Count(Case(When(start__gte=this_start, then='dept'), output_field=IntegerField()))
)
.order_by('-this_total'))

关于python - 如何按日期过滤以从 QuerySet 中获取本周与前一周的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44066649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com