Django的筛选日期范围ORM问题

问题描述 投票:0回答:2

我有麻烦一点点搞清楚我要去的地方错在这里。我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

python django datetime django-filter
2个回答
3
投票

这是可能你结束了具有不同的时区比存储在数据库中的过滤日期。

使用Django,你应该总是使用django.utils.timezone.now()而不是datetime.now()。通过这种方式,可以确保你会得到它的日期数学项目的时区,那么它应该与数据库中存储的日期时间。

更多信息:https://docs.djangoproject.com/en/2.1/topics/i18n/timezones/#naive-and-aware-datetime-objects


0
投票

你最终日期是UTC时区,但在你的数据库中的记录被定位于服务器的时区。根据您的服务器的时区2019-02-11 10:26:16.235354+00:00的结束日期实际上是不同的,例如,对于纽约这将是2019-02-11 05:26:16.235354+00:00

卸下开始和结束日期.replace(tzinfo=pytz.UTC),你应该是好的。

© www.soinside.com 2019 - 2024. All rights reserved.