django JsonResponse 忽略的自定义编码器
Custom encoder ignored by django JsonResponse
我正在使用 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.
您必须传递 date/time 之类的值、小数类型或
您的方法的 UUID 覆盖 default
被调用。
尝试更改为
class CustomEncoder(DjangoJSONEncoder):
def default(self, o):
return int(o) + 10
response = JsonResponse({"data": Decimal(1)}, encoder=CustomEncoder)
它将 return {"data": 11}
我正在使用 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.
您必须传递 date/time 之类的值、小数类型或
您的方法的 UUID 覆盖 default
被调用。
尝试更改为
class CustomEncoder(DjangoJSONEncoder):
def default(self, o):
return int(o) + 10
response = JsonResponse({"data": Decimal(1)}, encoder=CustomEncoder)
它将 return {"data": 11}