Django REST框架:反序列化对象列表

时间:2017-03-19 14:07:55

标签: python json django serialization

我想接受如下的JSON数据:

{
    'id': 166,
    'data_lines': [
        {
            'name': 'string',
            'quantity': '1',
            'id': '1'
        },

        {
            'name': 'string',
            'quantity': '2',
            'id': '12'
        },

        {
            'name': 'string',
            'quantity': '3',
            'id': '18'
        }
    ],
}

我希望能够通过反序列化数据来构建一个简单的购物篮

问题是,我现在有三个序列化器。

在其中一个中,我们称之为MiddleSerializer,我有:

class MiddleSerializer(serializers.Serializer):
    thing = ThingSerializer()

我只想传递那个ThingsSerializer一个传入的id并让它处理它自己的东西。当我通过一个带有关键“东西”的字典时,这一切都很好用,花花公子。

但是,我希望能够得到这些列表并且我有一个序列化器,这个MiddleSerializer嵌套在里面。它看起来如下:

class TopSerializer(serializers.Serializer):
    some_other_id = serializers.IntegerField()
    things = serializers.ListField(child=MiddleSerializer())
    # I also tried the above with (many=True)

但是当我将这个TopSerializer传递给我的数据时,它会让我错过关于缺少关键字'thing'的错误。

如何设置序列化程序以便我可以传递数据列表?我有一种感觉,我可以以某种方式利用PrimaryKeyRelatedField(),因为ThingSerializer()是ModelSerializer。但是我发现文档有点不清楚如何从非模型序列化器中使用它,我不确定它是否能达到目的。可能是这样。

1 个答案:

答案 0 :(得分:0)

在我的思考过程中,这更像是一个错误。像下面那样格式化JSON就可以了。

{
    'thing': {
        'name': 'string',
        'id': '18',
    },
    quantity': '3'
}