在Django Rest中修改ListAPIView响应格式的方法咨询
调整Django REST Framework ListAPIView的响应格式
嘿,要把原来的数组响应改成外层带Users键的结构其实很简单,只需要重写ListAPIView里的list方法就行,直接在你的视图类里改就好,不用动序列化器。
先看你现有的代码,首先记得给视图补充queryset(不然运行会报错),然后修改list方法:
from rest_framework import generics, serializers from .models import User class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('name',) class UserReadView(generics.ListAPIView): lookup_field = 'id' serializer_class = UserSerializer queryset = User.objects.all() # 补充查询集,视图必须要有这个配置 def list(self, request, *args, **kwargs): # 先调用父类的list方法拿到原始的数组响应数据 original_response = super().list(request, *args, **kwargs) # 重新构造响应结构,把原始数据放到"Users"键下 original_response.data = { "Users": original_response.data } return original_response
这样修改后,接口返回的JSON就会变成你想要的格式:
{ "Users": [ {"name": "Andrew"}, {"name": "Daniel"} ] }
如果以后你有多个视图都需要这种格式,也可以考虑自定义一个基类视图,把这个逻辑抽出来复用,但针对单个视图的话,上面的方法最直接高效。
内容的提问来源于stack exchange,提问作者Dasith
相关产品推荐
相关产品推荐

