我正在尝试访问一个数据库,其中有 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)正好是 -5 小时,所以现在真正的问题这就是为什么模板对同一模型显示不同的时间......更重要的是我如何纠正它......
最佳答案
根据Django QuerySet reference for date
:
When
USE_TZ
is True, fields are converted to the current time zone before filtering.
鉴于这两项任务都在午夜后不久发生,我怀疑转换为您设置的时区导致了您所看到的问题。
关于python - 为什么 django 日期过滤器也给我提供第二天的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39967155/