Я создаю приложение, которое будет обслуживать людей, расположенных в разных местах во всем мире.
Я использую Django-Rest-Framwork для связи между клиентами и сервером.
Все значения DateTime сохраняются в DB как UTC (у меня есть USE_TZ = True
и TIME_ZONE = 'Greenwich'
в settings.py).
Я получаю от пользователя его часовой пояс.
В test DRF для распознавания часового пояса я написал это промежуточное ПО с фиксированным часовым поясом:
import pytz
from django.utils import timezone
class TimezoneMiddleware(object):
def process_request(self, request):
timezone.activate(pytz.timezone("Asia/Jerusalem"))
Проблема заключается в следующем:
У меня есть случай, когда я получаю от полей пользователя "start_time" и "end_time", содержащих даты в пользовательском часовом поясе LOCAL, который проходит через UnicodeJSONRenderer
до ModelSerializer
, а затем сохраняется к БД. Однако они сохраняются , как если бы они были в формате UTC.
В этот момент я ожидал, что сериализатор (или синтаксический анализатор) будет обрабатывать ввод данных datetime от пользователя как datetime, который нужно преобразовать из "Азия/Иерусалим" в UTC перед сохранением в БД, так как я выполнил timezone.activate(pytz.timezone("Asia/Jerusalem"))
.
То же самое происходит, когда данные анализируются в ответ через JSONParser
.
Ожидая, что поля DateTime в возвращенном JSON будут в часовом поясе, активированные в промежуточном программном обеспечении, они возвращаются в формате UTC.
Как я могу легко достичь этого в DRF?