Django: "auto_now_add = True" дает неправильное время - PullRequest
0 голосов
/ 26 октября 2018

Я бы хотел, чтобы текущее время записывалось автоматически при создании записи в моей базе данных Django.

В моей модели я использую:

dateTime = models.DateTimeField(auto_now_add=True)

Насколько я понимаю, это автоматически помечает время, учитывая правильный часовой пояс. Вместо этого, однако, это выводит время, которое на 5 часов опережает мое местное время.

Итак, чтобы попытаться отладить это, я запустил эту функцию в своем представлении и напечатал вывод:

from django.utils import timezone
timeNow =  timezone.localtime(timezone.now())

timeNow выведет правильное время.

Итак, я изменил свою модель на:

def get_time():
    return timezone.localtime(timezone.now())

dateTime = models.DateTimeField(default = get_time)

Это все равно приводит к той же неправильной отметке времени.

Я также изменил часовой пояс в моих settings.py

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Canada/Central'

USE_I18N = True

USE_L10N = True

USE_TZ = True

Есть идеи, что мне не хватает?

1 Ответ

0 голосов
/ 27 октября 2018

Насколько я понимаю, это автоматически помечает время, учитывая правильный часовой пояс.

Это недоразумение.См. Первое предложение документации по часовому поясу :

Когда включена поддержка часовых поясов, Django сохраняет информацию о дате и времени в формате UTC в базе данных , использует время-обнаружение объектов даты и времени внутри зоны и их преобразование в часовой пояс конечного пользователя в шаблонах и формах.

Как вы видели, дату и время в формате UTC можно затем преобразовать во все, что вы хотите отобразитьи т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...