Сериализация данных в формат 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)