【发布时间】:2016-10-04 09:54:23
【问题描述】:
我很难理解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 是一个列表,可能包含我想要的任意数量的元素。
环境
- python 3.5.1
- django 1.9.6
- django-rest-framework 3.3.3
【问题讨论】:
-
不应该
child是一个序列化程序类而不是一个字段实例? [编辑:不,不应该,我的错] -
Documentation example 将
Field替换为Serializer,这就是我这样做的原因,但我将尝试使用Serializer以了解它是否有效。
标签: python django python-3.x django-rest-framework