You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Serializer返回amount为None但request.data数据正确的问题求助

问题:Serializer返回amount为None,但request.data中值正确

我希望从Serializer中获取amount数据,但Serializer返回了None;不过从request.data中却能获取到正确的amount值,请求协助解决。

终端输出内容

System check identified no issues (0 silenced).
August 23, 2022 - 16:19:21
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
{'amount': 1000000}
{'amount': None}
Internal Server Error: /api/zarinpal/request/
Traceback (most recent

视图函数代码

@api_view(['GET', 'POST'])
@permission_classes([IsAuthenticated])
def request_to_pay(request):
    data = request.data
    print(data)
    serializer = RequestToPaySerializer(data=data)
    serializer.is_valid(raise_exception=True)
    print(serializer.data)

Serializer类定义

class RequestToPaySerializer(serializers.Serializer):
    amount = serializers.DecimalField(max_digits=20, decimal_places=3)
    description = serializers.CharField(required=False)

解决方案

核心问题

你用错了获取验证后数据的属性:在反序列化场景(将请求数据转为Python对象)下,serializer.data是用来序列化输出的工具属性,验证后的输入数据要从serializer.validated_data中获取。

修复步骤

把视图中的print(serializer.data)改为:

print(serializer.validated_data)

补充说明

  • DecimalField支持解析整数、字符串形式的数字,所以request.data中的1000000(整数类型)可以被正确验证并转换为Decimal类型,存储在validated_data中。
  • 如果后续需要将数据序列化输出(比如返回响应),再使用serializer.data,它会把Decimal类型转换为符合格式的数值(比如带指定小数位的字符串或数字)。

内容的提问来源于stack exchange,提问作者Sasan Mahmoodi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:34:43