首页 > 解决方案 > 如何使用 Django-Restframework 序列化包含列表的字典?

问题描述

我正在为我的 Django-App 创建一个 REST-API。我有一个函数,它返回一个字典列表,我想将其序列化并与 rest-api 一起返回。

列表 (nodes_of_graph) 如下所示: [{'id': 50, position: {'x': 99.0, 'y': 234.0}, 'locked': True}, {'id': 62, position: { 'x': 27.0, 'y': 162.0}, 'locked': True}, {'id': 64, position: {'x': 27.0, 'y': 162.0}, 'locked': True}]

由于我是 python、django 和 Restframwork 的新手,我不知道如何尝试这个。有人在这里吗,谁知道如何解决这个问题?

不知何故,我序列化这个列表的所有尝试都失败了。我试过了

class Graph_Node_Serializer(serializers.ListSerializer):
    class Nodes: 
        fields = (
            'id',
            'position',
            'locked',
        )

def nodes_for_graph(request, id): 
    serializer = Graph_Node_Serializer(nodes_of_graph)
    return Response(serializer.data)

我希望的结果是 django-rest-framework 的响应,其中包含字典列表中的数据。

标签: jsondjangolistdjango-rest-framework

解决方案


一个可行的解决方案是创建 Serializer 类的子类。对于这里制定的问题,它看起来像这样:

Graph_Node_Serializer(serializers.Serializer)
    id = serializers.IntegerField(required=True)
    class PositionSerializer(serializers.Serializer):
        x = serializers.FloatField(required=True)
        y = serializers.FloatField(required=True)
    position = PositionSerializer(required=False)
    locked = serializers.BooleanField(required=False, default=True)

def nodes_for_graph(request, graph_id): 
    serializer = Graph_Node_Serializer(nodes_of_graph, many=True)
    Response(serializer.data)

推荐阅读