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

如何用Django REST Framework编写列表型输入数据的Serializer?

你的Serializer实现有多处错误,正确写法及列表数据处理方法如下

先说说你代码里的问题:

  • Python的布尔值是大写True,不是小写true
  • serializers.Integer()不能这么传参,应该写成serializers.IntegerField(required=False)
  • max_lenght拼写错误,正确是max_length
  • 处理嵌套列表不能用[serializer.JSONField()],DRF需要用嵌套Serializer来处理这种结构化的列表数据
  • 所有字段必须放在继承自serializers.Serializer(或ModelSerializer)的类里,你现在只是零散定义变量,不符合DRF的要求

正确的Serializer实现

先写处理单个产品的子Serializer,再写包含产品列表的父Serializer:

from rest_framework import serializers

# 处理单个产品结构的子Serializer
class ProductSerializer(serializers.Serializer):
    product_id = serializers.IntegerField(required=False)
    descriptions = serializers.CharField(max_length=300)

# 处理顶层数据的父Serializer
class TopLevelSerializer(serializers.Serializer):
    id = serializers.CharField(write_only=True, required=True)
    products = ProductSerializer(many=True)  # many=True标记这是一个列表字段

列表型数据的Serializer写法

处理列表数据的核心是嵌套Serializer + many=True参数:

  • 先为列表里的单个元素定义对应的子Serializer
  • 在父Serializer的列表字段中,用子Serializer作为字段类型,加上many=True,告诉DRF这个字段是列表,需要逐个用子Serializer处理元素
  • 如果是序列化模型查询集这类列表数据,实例化Serializer时也要传many=True,比如ProductSerializer(Product.objects.all(), many=True)

内容的提问来源于stack exchange,提问作者Brian Huynh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:52:50