我有具有指定模型和序列化程序类的普通ListAPIView。我需要在列表末尾添加一个附加项。此项目应手动创建(无查询集),并且应具有与其他项目相同的结构。
您可以为此重写list
方法:
from rest_framework.response import Response
class YoourView(generics.ListAPIView):
def list(self, request):
queryset = self.get_queryset()
serializer = UserSerializer(queryset, many=True)
# append serializer's data with some additional value
response_list = serializer.data
response_list.append(some_value)
return Response(response_list)
尝试一下,
from rest_framework import generics
from rest_framework.response import Response
class MyListView(generics.ListAPIView):
serializer_class = MySerializer
queryset = MyModel.objects.all()
def list(self, request, *args, **kwargs):
response_list = list(super().list(request, *args, **kwargs))
custom_dict = {
"key_1": "value 1",
"key_2": "value 2"
}
response_list.append(custom_dict)
return Response(data=response_list)
我认为最好保留get_queryset
,filter_queryset
和get_serializer
功能,以防您修改serializer_class
而不是使用默认的serializer_class
。
class YourView(ListAPIView):
queryset = DefaultQueryset
serializer_class = DefaultSerializer
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
serializer = self.get_serializer(queryset, many=True)
response_list = serializer.data
response_list.append(some_value)
return Response(response_list)
我建议您将实际负载与要传递的额外数据分开。这样一来,当您以后遍历那些冲突时,将有助于您避免很多冲突。
尝试一下:
class YourView(ListAPIView):
queryset = YourModel.objects.all()
serializer_class = YourSerializer
def list(self, request, args, **kwargs):
serializer = self.get_serializer(self.get_queryset(), many=True)
load = serializer.data
newdict = {'your_new_data': 666}
response_list = {'load': load, 'extra': newdict}
return Response(response_list)