我很难理解 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__() got an unexpected keyword argument 'stops_left'
期望的输出
{
"idn": 1,
"buses": [
{"idn": 11, "stops_left": 4},
{"idn": 12, "stops_left": 15}
]
}
如何实现? buses
是一个列表,可以包含任意数量的元素。
环境
- python 3.5.1
- django 1.9.6
- django-rest-framework 3.3.3
最佳答案
我认为与其这样做,不如使用嵌套序列化器。
创建一个 BusSerializer
具有字段 idn
和 stops_left
。然后将此序列化器包含在您的 StopOncomingSerializer
中作为 buses
字段和 many=True
参数来处理多个 buses
数据。
class BusSerializer(serializers.Serializer):
idn = serializers.IntegerField(read_only=True)
stops_left = serializers.IntegerField(read_only=True)
class StopOncomingSerialier(serializers.Serializer):
idn = serializers.IntegerField(read_only=True)
buses = BusSerializer(many=True)
关于python - Django Rest Framework ListField 和 DictField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37629501/