我在理解ListField
和DictField
方面遇到了困难。我想将它用作序列化程序中的字段。我有ListField
,可能包含许多DictField
。我试着编写如下的序列化器:
class StopOncomingSerialier(serializers.Serializer):
idn = serializers.IntegerField(read_only=True)
buses = serializers.ListField(
child=serializers.DictField(
idn=serializers.IntegerField(read_only=True),
stops_left=serializers.IntegerField(read_only=True)
),
read_only=True
)
我知道,这没有意义,因为文档说DictField
和ListField
将child
作为参数。所以,上面的代码自然会引发错误:
TypeError: __init __()得到了一个意外的关键字参数'stops_left'
{
"idn": 1,
"buses": [
{"idn": 11, "stops_left": 4},
{"idn": 12, "stops_left": 15}
]
}
如何实现这一目标? buses
是一个列表,可能包含我想要的任意数量的元素。
答案 0 :(得分:16)
我认为不应该这样做,而应使用嵌套序列化程序。
创建包含字段BusSerializer
和idn
的{{1}}。然后将此序列化程序包含在stops_left
StopOncomingSerializer
字段中,并带有buses
参数,以处理多个many=True
数据。
buses