Python Django筛选器日期范围ORM问题
我在想我到底哪里出了问题时遇到了一点麻烦。我试图在一个日期范围为15天的数据库中收集条目,但我的查询没有选择正确的选项 以下是我的代码的重要部分:Python Django筛选器日期范围ORM问题,python,django,datetime,django-filter,Python,Django,Datetime,Django Filter,我在想我到底哪里出了问题时遇到了一点麻烦。我试图在一个日期范围为15天的数据库中收集条目,但我的查询没有选择正确的选项 以下是我的代码的重要部分: start = datetime.now().replace(tzinfo=pytz.UTC) - timedelta(days=15) end = datetime.now().replace(tzinfo=pytz.UTC) # 2019-01-27 10:26:16.235354+00:00 | 2019-02-11 10:26:16.2353
start = datetime.now().replace(tzinfo=pytz.UTC) - timedelta(days=15)
end = datetime.now().replace(tzinfo=pytz.UTC)
# 2019-01-27 10:26:16.235354+00:00 | 2019-02-11 10:26:16.235354+00:00
print(start, '|', end)
completed_work_orders = WorkOrders.objects.using(db_alias).filter(
unit_id=int(resident.unit_id),
resident_dismissed=1).filter(date_created__range=[start, end]).order_by('-date_created')
这给了我:
已完成:
这里我只选择了1行,当它应该选择3时,这里是我为第7行、第8行和第9行创建的date\u值,只选择了第7行:
7)已选定2019-02-07 12:07:59.72546-08
8)未选择2019-02-11 08:58:27.561245-08
9)未选中2019-02-11 09:03:35.063078-08您的结束日期在UTC时区,但数据库中的记录本地化到服务器的时区。根据您服务器的时区,2019-02-11 10:26:16.235354+00:00
的结束日期实际上会有所不同,例如,对于纽约,它将是2019-02-11 05:26:16.235354+00:00
从开始日期和结束日期中删除.replace(tzinfo=pytz.UTC)
,您应该很好。您的结束日期在UTC时区,但数据库中的记录本地化到服务器的时区。根据您服务器的时区,2019-02-11 10:26:16.235354+00:00
的结束日期实际上会有所不同,例如,对于纽约,它将是2019-02-11 05:26:16.235354+00:00
从开始日期和结束日期中删除.replace(tzinfo=pytz.UTC)
,您应该很好。您可能会将筛选后的日期设置为与数据库中存储的日期不同的时区
对于Django,您应该始终使用Django.utils.timezone.now()而不是datetime.now()。这样,您就可以确保获得与项目时区相匹配的日期,然后这些日期应该与数据库中存储的日期时间相匹配
更多信息:有可能您的筛选日期的时区与存储在数据库中的日期不同
对于Django,您应该始终使用Django.utils.timezone.now()而不是datetime.now()。这样,您就可以确保获得与项目时区相匹配的日期,然后这些日期应该与数据库中存储的日期时间相匹配
更多信息:如果您几个小时前没有写这封信,您就有一个时区偏移。@Klaus D。我更改了我的系统时间,所以它是同步的,选择问题仍然存在。这看起来确实像其他问题中的问题,但这并不重要。对于Django,您应该始终使用Django.utils.timezone.now()
,而不是datetime.now()
。这样,您就可以确保获得与项目时区相匹配的日期,然后这些日期应该与数据库中存储的日期时间相匹配@NikolasStevenson Molnar,这实际上解决了我的问题!杰出的我会把它变成一个答案。如果你几个小时前没有写这个,你就有一个时区偏移。@Klaus D。我更改了我的系统时间,所以它是同步的,选择问题仍然存在。这看起来确实像其他问题中的问题,但这并不重要。对于Django,您应该始终使用Django.utils.timezone.now()
,而不是datetime.now()
。这样,您就可以确保获得与项目时区相匹配的日期,然后这些日期应该与数据库中存储的日期时间相匹配@NikolasStevenson Molnar,这实际上解决了我的问题!杰出的我会把它变成一个答案。当我这么做的时候,我会得到一个天真的datetime警告。这不应该是问题所在<代码>运行时警告:DateTimeField WorkOrders.date_created在时区支持处于活动状态时收到原始日期时间(2019-01-27 14:13:50.546234)。运行时警告)
当我这样做时,我会得到一个天真的日期时警告。这不应该是问题所在<代码>运行时警告:DateTimeField WorkOrders.date_created在时区支持处于活动状态时收到原始日期时间(2019-01-27 14:13:50.546234)。运行时警告)