如何将Django REST Framework JSON响应的一部分从列表更改为字典? [英] How can I change part of a Django REST Framework JSON response from a list to a dictionary?

查看:317
本文介绍了如何将Django REST Framework JSON响应的一部分从列表更改为字典?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

更具体地说,我需要将响应的嵌套部分设置为多项目字典,而不是许多单项字典的列表.

More specifically, I need a nested part of my response to be a multi-item dictionary rather than a list of many single-item dictionaries.

我将返回我想要的所有数据,但是如果没有我认为无关紧要的列表,我无法弄清楚如何更合理地格式化数据

I am returning all the data I want, but I cannot figure out how to format it more sensibly without what I consider to be an extraneous list

这是我目前收到的(简体)回复:

Here is the (simplified) response I am currently getting:

{
    "uielements": [
        {
            "home-bg": {
                "label_text_color": "#123456",
                "tag_display_text": "young"
            }    
        },
        {
            "home-speak-btn": {
                "label_text_color": "",
                "tag_display_text": null
            }
        }
    ]
}

我希望回复采用以下格式:

I would like the response to be in this format:

{
    "uielements": {
        "home-bg": {
            "label_text_color": "#123456",
            "tag_display_text": "young"
        },   
        "home-speak-btn": {
            "label_text_color": "",
            "tag_display_text": null
        }
    }
}

这是我相关的serializer.py代码:

class UIElementProjectSerializer(serializers.ModelSerializer):
    class Meta:
        model = UIElement

    def to_representation(self, obj):
        result = super(UIElementProjectSerializer, self).to_representation(obj)
        uien = UIElementName.objects.filter(id=result['uielementname'])[0]
        return {uien.name: result}

和我相关的views.py代码:

class ProjectViewSet(viewsets.ViewSet):

...

    @detail_route(methods=['get'])
    def uielements(self, request, pk=None):
        uielements = UIElementFilterSet(params)
        serializer = serializers.UIElementProjectSerializer(uielements, many=True)
        return Response({"uielements": serializer.data})

推荐答案

我要做的就是使用

Turns out what I needed to do is use the code provided by Dmitry Kovriga not in a new custom ListSerializer, but rather in the view itself after serialization has occurred.

更新了 views.py

class ProjectViewSet(viewsets.ViewSet):
    ...

    @detail_route(methods=['get'])
    def uielements(self, request, pk=None):
        uielements = UIElementFilterSet(params)
        serializer = serializers.UIElementProjectSerializer(uielements, many=True)
        result = {}
        for element in serializer.data:
            for key, value in element.items():
                result[key] = value
        return Response({"uielements": result})

这篇关于如何将Django REST Framework JSON响应的一部分从列表更改为字典?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆