Django Rest Framework ListField和DictField

时间:2016-06-04 11:13:29

标签: python django python-3.x django-rest-framework

我在理解ListFieldDictField方面遇到了困难。我想将它用作序列化程序中的字段。我有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
    )

我知道,这没有意义,因为文档说DictFieldListFieldchild作为参数。所以,上面的代码自然会引发错误:

  

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

1 个答案:

答案 0 :(得分:16)

我认为不应该这样做,而应使用嵌套序列化程序

创建包含字段BusSerializeridn的{​​{1}}。然后将此序列化程序包含在stops_left StopOncomingSerializer字段中,并带有buses参数,以处理多个many=True数据。

buses