我在找出我要去哪里的地方时遇到了一些麻烦。我正在尝试收集日期范围为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的时候只选择1行,这是我的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
答案 0 :(得分:3)
有可能您最终过滤的日期的时区与数据库中存储的日期不同。
对于Django,您应始终使用django.utils.timezone.now()而不是datetime.now()。这样,您可以确保获得的日期与项目的时区相符,然后与数据库中存储的日期时间匹配。
更多信息:https://docs.djangoproject.com/en/2.1/topics/i18n/timezones/#naive-and-aware-datetime-objects
答案 1 :(得分:0)
您的结束日期为UTC时区,但是数据库中的记录已本地化为服务器的时区。根据您服务器的时区,2019-02-11 10:26:16.235354+00:00
的结束日期实际上会有所不同,例如对于NY,它将是2019-02-11 05:26:16.235354+00:00
。
从开始和结束日期中删除.replace(tzinfo=pytz.UTC)
,您应该会很好。