#python #django #sqlite
#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)
получил тот же результат.
Итак, почему date возвращает записи из 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>)
что ясно показывает, что 3-я задача хранится в другое время и то, которое она показывает в шаблоне, на самом деле я думаю, что это ровно -5 часов с момента отображения, которое является GMT, поэтому теперь возникает реальный вопрос: почему шаблон показывает разное время для одной и той же модели …. и что более важно, как я могу это исправить…
Комментарии:
1. Установлен ли ваш
USE_TZ
var наTrue
?2. да, это так………
Ответ №1:
Согласно ссылке на набор запросов Django для date
:
Когда
USE_TZ
значение True, поля преобразуются в текущий часовой пояс перед фильтрацией.
Учитывая, что обе задачи выполняются вскоре после полуночи, я подозреваю, что преобразование в ваш установленный часовой пояс вызывает проблему, которую вы видите.
Комментарии:
1. прямо на моего друга, так что теперь моя проблема в том, что когда я фильтрую на серверной части, время отличается, а когда я отображаю их в шаблонах, время отличается, как я могу сделать их одинаковыми… Предполагая, что пользователь хотел бы и ожидал, что время будет в его собственном часовом поясе, так как я могу фильтровать на основе того, что на самом деле хочет пользователь, например, как я могу получить значения для значений 26 сентября….
2. @fazkan Я думаю, что это был бы отличный дополнительный вопрос, как только вы кратко ознакомитесь с документами Django. У меня нет ответа с головы до ног.
Ответ №2:
Я знаю, что это ужасное решение, но оно сработало для меня. Отключите USE_TZ и включите снова после выполнения запроса:
from django.conf import settings
settings.USE_TZ = False
.... [query]
settings.USE_TZ = True