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

使用DRF Serializers验证包含动态键的嵌套字典

解决方案

你之前的错误是多定义了不必要的嵌套序列化层,同时滥用了source='*'参数导致序列化器尝试读取不存在的字段。DRF的DictField天生支持动态键场景,其child参数可直接指定字典中所有值的统一校验规则,不需要关心键的具体名称和数量。

正确序列化器代码

class SiteAirmassDatumSerializer(serializers.Serializer):
    times = serializers.ListField(child=serializers.CharField())
    airmasses = serializers.ListField(child=serializers.FloatField())


class AirmassSerializer(serializers.Serializer):
    # DictField的child参数指定字典所有值的校验结构,自动适配任意动态键
    airmass_data = serializers.DictField(child=SiteAirmassDatumSerializer())
    airmass_limit = serializers.FloatField()

特性说明

  1. 校验逻辑完全匹配你的需求:仅验证airmass_data为字典,且字典下每个值都包含符合格式的times和airmasses字段,不限制动态site键的数量和名称
  2. 完美适配DRF的OpenAPI生成能力:生成的Schema会自动将airmass_data定义为additionalProperties指向SiteAirmassDatumSerializer结构的对象,完全符合OpenAPI规范对动态键字典的定义。

内容的提问来源于stack exchange,提问作者Matt Daily

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:18:03