Django:TruncDate 日期时间返回始终是日期时间

问题描述 投票:0回答:1

我在 x86_64 上使用 Django 3.2.12 和 mysql 8.0.27 for Win64(MySQL 社区服务器 - GPL)并拥有此模型

class Anomalie(models.Model):
        dateajout = models.DateTimeField(auto_now_add=True, null=True)

我试图每天获取所有异常,所以我使用这个:

items = Anomalie.objects.annotate(date=TruncDate('dateajout')).values('dateajout').annotate(count=Count('id')).values('dateajout', 'count')

但是当我打印项目时我得到这个:

如您所见,即使在同一天(2023,8,6)创建了 2 个异常,我总是得到“'count': 1”...我认为这是因为 TruncDate 返回日期时间而不是日期。 .

我在许多论坛上进行了搜索,例如https://forum.djangoproject.com/t/problem-with-count-and-truncdate/10122Formatting dates for annotating count in Django + Python 3但我没有知道我做错了什么...有什么想法吗?

django datetime annotate
1个回答
0
投票

你不应该使用

dateajout
,那仍然是
datetime
,你使用
date
,你注释的东西:

items = (
    Anomalie.objects.annotate(date=TruncDate('dateajout'))
    .values('date')
    .annotate(count=Count('id'))
    .values('date', 'count')
)

您可以将其简化为:

items = Anomalie.objects.values(date=TruncDate('dateajout')).annotate(
    count=Count('id')
)
© www.soinside.com 2019 - 2024. All rights reserved.