【发布时间】:2019-07-05 07:59:32
【问题描述】:
我在搞清楚哪里出了问题时遇到了一些麻烦。我正在尝试在日期范围为 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.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')
这给了我:
completed: <QuerySet [<WorkOrders: WorkOrders object (7)>]>
这里我只选择了应该选择 3 的行,这是我的 date_created 第 7、8 和 9 行的值,只选择了第 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
【问题讨论】:
-
如果你几个小时前没有写这个,你就有一个时区偏移。
-
@Klaus D. 我把系统时间改回来了,所以它是同步的,选择问题仍然存在。这确实看起来像其他问题的问题,但没关系。
-
对于 Django,您应该始终使用
django.utils.timezone.now()而不是datetime.now()。这样,您可以确保您将获得与项目时区相匹配的日期,然后该日期应该与存储在数据库中的日期时间相匹配。 docs.djangoproject.com/en/2.1/topics/i18n/timezones/… -
@NikolasStevenson-Molnar,这实际上解决了我的问题!
-
太棒了!我会把它变成一个答案。
标签: python django datetime django-filter