如何将Django REST Framework JSON响应的一部分从列表更改为字典? [英] How can I change part of a Django REST Framework JSON response from a list to a dictionary?
问题描述
更具体地说,我需要将响应的嵌套部分设置为多项目字典,而不是许多单项字典的列表.
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屋!