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

为何Serializer中非必填字段会被序列化为None而非省略?

问题解析
  • allow_null=True的影响:这个参数不仅允许字段值为None,还会让序列化器在未接收到该字段输入时,主动将其设为None并包含在data输出结果里。
  • data与validated_data的区别:
    • validated_data是验证后直接提取的原始输入数据,你传的是空字典,所以这里返回空的OrderedDict,完全符合预期。
    • data是序列化器经过格式化处理后的输出数据,因为开启了allow_null=True,序列化器会自动为未传入的该字段填充None值,因此会出现{'field_one': None}的结果。

官方文档中“键不存在则不会包含在输出中”的描述,针对的是从模型实例/对象序列化的场景——比如你序列化一个没有field_one属性的对象,此时如果required=False且未设置allow_null=True,输出结果里就不会包含这个字段。但你当前是**反序列化(传入空字典验证)**后生成输出,allow_null=True的规则会优先生效,导致字段被保留并设为None。

如果希望空字典输入后data返回空字典,只需移除allow_null=True参数即可,修改后的序列化器如下:

class DumbSerializer(serializers.Serializer):
    field_one = serializers.CharField(required=False)

内容的提问来源于stack exchange,提问作者A G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:06:24