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}