【问题标题】:Custom encoder ignored by django JsonResponseDjango JsonResponse 忽略了自定义编码器
【发布时间】:2021-03-22 23:31:51
【问题描述】:

我正在使用 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)

我对@9​​87654322@ 的期望是'{"data": 11}',但我得到的是'{"data": 1}'

我做错了什么?

【问题讨论】:

    标签: python json django encoding django-rest-framework


    【解决方案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)
    

    它将返回 {"data": 11}

    【讨论】:

      猜你喜欢
      • 2017-01-11
      • 2020-11-01
      • 1970-01-01
      • 2023-01-11
      • 2012-04-30
      • 1970-01-01
      • 2021-06-12
      • 2018-02-16
      • 1970-01-01
      相关资源
      最近更新 更多