Часовые пояса в Django. Foreign Key в формах

Делаю сайт, на котором будут заходить люди с разных стран, и у них разные часовые пояса. Каждый человек может создавать записи, и в каждой записи пользователь указывает дату и время создания. Как сделать так, что бы время создания у всех пользователей отображалось корректно? Допустим, человек с UTC+2 создает запись и указывает время 20:00. А у человека с UTC+3 показывается созданная запись с указанным временем 21:00.

Как я понял(наверное не правильно) по документации Django автоматически должен перевести указанное время в UTC и отображать все верно, если USE_TZ установлено True. Но у меня почему-то оно не переводится. Сохраняется в том времени, которое указал пользователь, и всем другим пользователям отображается такое же время.

Для сохранения времени я использую формы Django, поле даты указал в:

date_of = forms.CharField(widget=forms.DateInput(attrs={"type": 'datetime-local'}), initial=datetime.date.today(),
                              label='Дата операции')

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

date_of = models.DateTimeField(verbose_name='Дата операции')

Второй вопрос, у меня есть модель, в которой указано поле Foreign Key к User. Какой способ лучше всего подойдет для того, что бы при создании записи, автоматически в это поле заносить авторизованного пользователя. Поле:

user = models.ForeignKey(to='User', on_delete=models.CASCADE, verbose_name='Пользователь')

В view использую класс, который наследуется от CreateView


Ответы (1 шт):

Автор решения: Elliot13

В settings - укажи нужный TIME_ZONE для сайта.

Потом почитай Time zones и про activate (timezone)

Вообщем, нужно так:

from django.utils.timezone import activate
activate(settings.TIME_ZONE)

Поле для даты правильнее было бы так:

date_of = forms.DateTimeField(widget=forms.DateInput(attrs={"type": 'datetime-local'}), initial=format(datetime.date.today(), '%Y-%m-%d %H:%M)
                          label='Дата операции', localize=True)

Насчёт юзера, логика передачи юзера для CreateView такая:

def form_valid(self, form):
    self.object = form.save(commit=False)
    self.object.user = self.request.user
    self.object.save()
    return super().form_valid(form)

И в модели достаточно просто User, без to='User'

→ Ссылка