为什么django日期过滤器会给我第二天的参赛作品

时间:2016-10-10 21:38:53

标签: python django sqlite

我正在尝试访问一个数据库,其中包含2016,9,25的两个条目和2016,9,26的两个条目,每个条目都有不同的时间......我通过列出每个条目来查看它们我模板中的task.start_time是我得到的列表

TASK        Task.title                  duration    start_time                  project     project_color   user
1st task    This is the first task      0:02:40     Sept. 25, 2016, 11:42 p.m.  Unassigned  NO COLOR    faizank
2nd task    This is the second task     0:01:30     Sept. 25, 2016, 11:47 p.m.  Unassigned  NO COLOR    faizank
3rd task    asdasdasdasd                0:20:00     Sept. 26, 2016, 12:19 a.m.  Unassigned  NO COLOR    faizank
3rd task    this is the problem         0:20:00     Sept. 26, 2016, 12:22 a.m.  Unassigned  NO COLOR    faizank

start_time是datetime_field,现在我使用以下查询过滤datetime对象

>>> c= Task.objects.filter(start_time__date=datetime.date(2016,9,25)

这给了我

<QuerySet [<Task: 1st task>, <Task: 2nd task>, <Task: 3rd task>, <Task: 3rd task>]>

但当我将日期更改为26时,它会给我一个空集......

我甚至做过这个

>>> c= Task.objects.filter(start_time__date=datetime.datetime(2016,9,25,0,0,0,0,pytz.UTC)

获得了相同的结果。

那么为什么日期从26返回条目......并且在查询26时它返回一个空集......

编辑1:

所以我只是想通了,日期存储的时间不同,我不知道为什么模板没有显示实际时间。所以在上述条目的情况下,我检查了实际时间并找到了以下内容......

>>> d= <QuerySet [<Task: 1st task>, <Task: 2nd task>, <Task: 3rd task>, <Task: 3rd task>]>
>>> d[2].start_time

并得到以下

datetime.datetime(2016, 9, 25, 19, 19, 59, 477000, tzinfo=<UTC>)

清楚地表明第三个任务存储在一个不同的时间和它在模板中显示的那个,实际上我认为它显示的是从显示GMT的时间-5h,所以现在真正的问题这就是为什么模板显示同一模型的不同时间....更重要的是我如何纠正它......

2 个答案:

答案 0 :(得分:2)

根据Django QuerySet reference for date

  

USE_TZ为True时,字段将在过滤前转换为当前时区。

鉴于这两项任务都是在午夜后不久发生的,我怀疑转换到您设定的时区会导致您遇到的问题。

答案 1 :(得分:0)

我知道这是一个可怕的解决方法,但这对我有用。完成查询后,禁用USE_TZ并再次启用:

from django.conf import settings
    settings.USE_TZ = False
    .... [query]
    settings.USE_TZ = True