Django按日期时间月份过滤____gte不起作用

时间:2020-03-13 08:00:15

标签: django django-models

我正在使用 Django 2.2

我有一个 DateTime 类型的created字段。

我正在使用以下命令来过滤大于特定日期的记录

q.filter(created__year__gte=2020, created__month__gte=3, created__day__gte=1)

在我的数据库中,有3月(3)个月的记录,还有2月(2)的记录。

执行上述命令后,它会为我提供大于 3月1日的数据的查询集列表。但是当我使用以下命令时

q.filter(created__year__gte=2020, created__month__gte=2, created__day__gte=28)

月份是2月(2),它不提供任何数据,查询集为空。

使用datetime对象会导致错误

received a naive datetime (2020-03-01 00:00:00) while time zone support is active

为什么即使月份少于gte,过滤器也无法与3配合使用?

3 个答案:

答案 0 :(得分:1)

使用:

q.filter(created__date__gte=datetime.date(2020, 3, 1))

关于过滤器,当月份<3时,它可以正常工作,但是如果您指定的日期> 28,则其已经缩小的结果设置为仅每个月29-31天之间创建的数据,而不仅是2月。很有可能不是您想要的。

答案 1 :(得分:0)

为什么要这样过滤?在您的情况下,这完全没有必要。严格按日期过滤

q.filter(created__gte=datetime.datetime(2020, 3, 1))

答案 2 :(得分:0)

该错误并非与 Django 设置有关,而是与 MySQL 配置有关,原因是缺少时区数据。

检查此答案以解决此错误

https://stackoverflow.com/a/60844090/3719167

相关问题