我需要得到每周和每年的物品数量。我试了以下方法
from django.db.models.functions import ExtractWeek, ExtractYear
from django.db.models.aggregates import Count
count = myModel.objects.annotate(year=ExtractYear('created_at')) \
.annotate(week=ExtractWeek('created_at')) \
.values('year','week') \
.annotate(count=Count('week'))
但我的结果是
<QuerySet [{'year': 2019, 'week': 7, 'count': 1}, {'year': 2019, 'week': 7, 'count': 1}, {'year': 2019, 'week': 7, 'count': 1}, {'year': 2019, 'week': 7, 'count': 1}.......
我怎样才能改变它,使我的结果是:
你知道吗
提前谢谢
我想出来了,忘了点结果
问题不在于缺少的
order_by
,而很可能恰恰相反:默认的order_by
可能通过指定默认排序的ordering
字段出现在myModel
中,该字段向查询中添加了另一个破坏分组的字段。相关的Django文档是here。你知道吗您可以通过在查询中附加
.order_by()
来摆脱它,也可以像在答案中那样指定不同的顺序。你知道吗这是一个让人一次又一次(包括我自己)的障碍,所以我不喜欢在模型中使用默认排序。你知道吗
PS:当事情没有按计划运行时,通过检查上次执行的查询来检查生成的SQL通常是有帮助的:
。。。或者通过询问刚刚定义的查询的SQL:
如果您喜欢看到的内容,但不喜欢SQL的格式化方式,请查看sqlparse。你知道吗
您可以使用
TruncWeek
和TruncYear
:因此,您将拥有:
其中
week
或year
值将是该范围的开始日期时间:一年中的一周更多细节可以在Django文档here中阅读。你知道吗
相关问题 更多 >
编程相关推荐