MySerializer(many=True)
-您可以在以下时间使用
MySerializer
对每个对象进行序列化。
serializers.ListField(child=MySerializer())
-如果你不仅想序列化对象,还想序列化结果可迭代数据,你可以使用这个。
例如,您希望为每个对象附加其在结果列表中的位置:
class ListSerializerWithIds(serializers.ListSerializer):
@property
def data(self):
data = super().data
result = []
for i, d in enumerate(data):
d["list_id"] = i
result.append(d)
return result
class MySerializer(serializers.Serializer):
a = serializer.CharField()
@classmethod
def many_init(cls, *args, **kwargs):
kwargs["child"] = cls()
return ListSerializerWithIds(*args, **kwargs)
现在,如果您将获得以下结果数据
MySerialier
它看起来像:
objects = [{"a": "a1", "b": "b1"}, {"a": "a2", "c": "c2"}]
serializer = MySerializer(objects, many=True)
serializer.data
# [{"a": "a1", "list_id": 0}, {"a": "a2", "list_id": 1}]
此外,您还可以使用
序列化器。ListField(child=MySerializer())
作为另一个序列化器的字段:
class MySerializer(serializers.Serializer):
a = serializers.CharField()
class AnotherSerializer(serializers.Serializer):
my_data = serializers.ListField(child=MySerializer())
现在看看结果:
objects = [{"my_data": [{"a": "a1", "b": "b1"}], "tralala": "blablabla"}, ]
serializer = AnotherSerializer(objects, many=True)
serializer.data
# [{"my_data": [{"a": "a1"}]}, ]