我有麻烦一点点搞清楚我要去的地方错在这里。我atempting聚集在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)>]>
在这里,我只选择1行,但是应该对行7,8被选择3,这里是我date_created
值,和9中,仅列7被选择:
7)选定的2019年2月7日12:07:59.72546-08
8)未选择2019年2月11日08:58:27.561245-08
9)未选择2019年2月11日09:03:35.063078-08
这是可能你结束了具有不同的时区比存储在数据库中的过滤日期。
使用Django,你应该总是使用django.utils.timezone.now()而不是datetime.now()。通过这种方式,可以确保你会得到它的日期数学项目的时区,那么它应该与数据库中存储的日期时间。
更多信息:https://docs.djangoproject.com/en/2.1/topics/i18n/timezones/#naive-and-aware-datetime-objects
你最终日期是UTC时区,但在你的数据库中的记录被定位于服务器的时区。根据您的服务器的时区2019-02-11 10:26:16.235354+00:00
的结束日期实际上是不同的,例如,对于纽约这将是2019-02-11 05:26:16.235354+00:00
。
卸下开始和结束日期.replace(tzinfo=pytz.UTC)
,你应该是好的。