Django Многопользовательский часовой пояс

Я новичок в django и работаю над приложением, которое может хранить заметки пользователя и время напоминания. Я следовал документу Django (https://docs.djangoproject.com/en/3.2/topics/i18n/timezones/) и добавил TimezoneMiddleware в middleware, метод set_timezone и шаблон timezone. Но все еще не могу получить правильный часовой пояс пользователя, он всегда отображается как UTC.

Я не уверен, нужно ли что-то добавить во фронтенд? Потому что как в коде:

class TimezoneMiddleware:
def __init__(self, get_response):
    self.get_response = get_response

def __call__(self, request):
    tzname = request.session.get('django_timezone')
    if tzname:
        timezone.activate(pytz.timezone(tzname))
    else:
        timezone.deactivate()
    return self.get_response(request)

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

Может ли кто-нибудь подсказать, что я мог упустить? Спасибо.

Создайте промежуточное программное обеспечение:

class TimezoneMiddleware(object):

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.user.is_authenticated:
            tz_str = request.user.country.code
            if tz_str:
                time_zone_countries = pytz.country_timezones(tz_str)
                for time_zone_l in time_zone_countries:
                    timezone.activate(pytz.timezone(time_zone_l))
            else:
                timezone.deactivate()
        else:
            timezone.deactivate()

        response = self.get_response(request)
        return response

Требования:

  • pytz
  • django-countries
  • .
  • В модели User добавьте этот объект: country = CountryField()
Вернуться на верх