Django rest framework 数据为列表的ModelSerializer

Django rest framework 数据为列表的ModelSerializer,django-rest-framework,Django Rest Framework,我有一个ModelSerializer类,如下所示,我希望接受一个项目列表或单个项目(字典)作为数据。文档说明,将“many”作为True传递将支持我的需求 class PointSerializer(serializers.ModelSerializer): class Meta: model = Point def __init__(self, *args, **kwargs): if "data" in kwargs:

我有一个ModelSerializer类,如下所示,我希望接受一个项目列表或单个项目(字典)作为数据。文档说明,将“many”作为True传递将支持我的需求

class PointSerializer(serializers.ModelSerializer):
    class Meta:
        model = Point

     def __init__(self, *args, **kwargs):
         if "data" in kwargs:
             if isinstance(kwargs["data"]):
                 kwargs["many"] = True
         super(PointSerializer, self).__init__(*args, **kwargs)
现在,提供数据字典如下:

p = PointSerializer(data={'x':10, 'y': 12})
p.is_valid() # True
但这一点,再加上一系列词典,都是失败的:

p = PointSerializer(data=[{'x':10, 'y':12}, {'x':12, 'y':12}])
p.is_valid() # False
p.errors() # {'non_field_errors': ['Invalid data. Expected a dictionary, but got a list.']}
更新:

由于选择了答案,我已将代码更改为以下代码,并且工作正常:

class PointSerializer(serializers.ModelSerializer):

    class Meta:
        model = Point

>>> ps = PointSerializer(data={'x':10, 'y':12})
>>> ps.is_valid()
... True
>>> ps = PointSerializer(data=[{'x':10, 'y':12}, {'x':12, 'y':12}], many=True)
>>> ps.is_valid()
... True

many=True
参数仅在实例化序列化程序时有效,因为它将在幕后返回一个
ListSerializer

您可以选择在创建调用期间将many=True设置为序列化程序参数,或者显式使用