Я создаю приложение с использованием Django Rest Framework (версии: django 3.1, djangorestframework 3.11.1, python 3.7)
Я хочу переопределить кодировщик, используемый в JsonResponse.
Упрощение моей проблемы:
from django.http import JsonResponse
from django.core.serializers.json import DjangoJSONEncoder
class CustomEncoder(DjangoJSONEncoder):
def default(self, o):
return o + 10
response = JsonResponse({"data": 1}, encoder=CustomEncoder)
Я ожидаю от response.getvalue()
'{"data": 11}'
, но вместо этого получаю '{"data": 1}'
.
Что я делаю не так ?
потому что DjangoJSONEncoder используется для
JSONEncoder subclass that knows how to encode date/time, decimal types, and
UUIDs.
вы должны передать значение, такое как дата/время, десятичные типы или
UUID для переопределения вашего метода default
.
Попробуйте изменить на
class CustomEncoder(DjangoJSONEncoder):
def default(self, o):
return int(o) + 10
response = JsonResponse({"data": Decimal(1)}, encoder=CustomEncoder)
он вернет {"данные": 11}