我正在使用 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
配合使用?
答案 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 配置有关,原因是缺少时区数据。
检查此答案以解决此错误