Сериализация данных в формат json с помощью собственного сериализатора Django

У меня есть словарь, который мне нужно передать другому представлению, зная, что возможные способы сделать это либо через сессии или кэш, теперь, когда я пытаюсь передать в сессию, он выдает ошибку, что данные не JSON сериализуемы, вероятно, потому что у меня есть DateTime поля внутри этого словаря

  session_data = serializers.serialize('json',session_data)

ошибка на вышеприведенном утверждении

'str' object has no attribute '_meta'

обновлено дата несколько в таком формате

{'city_name': 'Srinagar', 'description': 'few clouds', 'temp': 26.74, 'feels_like': 27.07, 'max_temp': 26.74, 'min_temp': 26.74, 'sunrise': datetime.time(6, 11, 10), 'sunset': datetime.time(18, 43, 59)}

Ваш session_data уже является словарем. Поскольку сериализатор Django ориентирован на сериализацию итерабельного объекта модели, это не сработает.

Вы можете использовать DjangoJSONEncoder [Django-doc] для сериализации объектов Python, которые включают date, datetime, time и/или timedelta объекты.

Таким образом, вы можете работать с:

from django.core.serializers.json import DjangoJSONEncoder

encoder = DjangoJSONEncoder()
session_data = encoder.encode(session_data)

Если вы планируете вернуть JSON блоб в качестве HTTP ответа, вы можете просто позволить JsonResponse выполнить работу по кодированию:

from django.http import JsonResponse

# …
return JsonResponse(session_data)
Вернуться на верх