gpt4 book ai didi

django - 在 Django 中按月/年注释(组)日期

转载 作者:行者123 更新时间:2023-12-04 02:35:49 25 4
gpt4 key购买 nike

使用 Django DateQuerySet我正在为 item 拉相关年份来自 Group 的对象查询。

>>> Group.objects.all().dates('item__date', 'year')
[datetime.date(1990, 1, 1), datetime.date(1991, 1, 1), ...(remaining elements truncated)...']

现在我想在这些日期按不同的年份进行计数。我认为这会奏效:
>>> Group.objects.all().dates('item__date', 'year').annotate(Count('year'))
FieldError: Cannot resolve keyword 'year' into field.

但看起来我错过了一些东西。如何修复此查询?

我也试过这个查询:
>>> (Group
.objects
.all()
.extra(select=
{'year':
connections[Group.objects.db].ops.date_trunc_sql('year', 'app_item.date')}))
ProgrammingError: missing FROM-clause entry for table "app_item" LINE 1: SELECT (DATE_TRUNC('year', app_item.date)) AS...

但这也行不通。

最佳答案

尝试以下方法:

from django.db.models import Count

Item.objects.all().\
extra(select={'year': "EXTRACT(year FROM date)"}).\
values('year').\
annotate(count_items=Count('date'))

您可能想使用 item_instance._meta.fields而不是在那里的 MySQL 语句中手动指定“日期”...

另外,请注意我从 Item 开始QuerySet 而不是 Group ,为简单起见。应该可以过滤 Item QuerySet 得到想要的结果,或者使 extra MySQL 有点复杂。

编辑:

这可能有效,但我肯定会在依赖它之前测试它的胆量:)
Group.objects.all().\
values('item__date').\
extra(select={'year': "EXTRACT(year FROM date)"}).\
values('year').\
annotate(count=Count('item__date'))

关于django - 在 Django 中按月/年注释(组)日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21837227/

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