gpt4 book ai didi

django-rest-framework - 如何在 django 的 ListAPIView 中返回自定义响应

转载 作者:行者123 更新时间:2023-12-02 01:42:18 25 4
gpt4 key购买 nike

我正在创建一个应用程序,我想以某种方式返回数据,就像在正常的 ListApiView 中一样,我们直接将所有字段作为响应,我不希望这样

我的观点.py:

class ListFolders(ListAPIView):
queryset = Folder.objects.all()
serializer_class = FolderSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = ['id', 'name']

在到达这个端点后,如果我的模型为空,我会得到简单的[],我不希望我想要的东西是这样的,现在我不知道该怎么做。

{
"status": "success",
"data" : [],
"msg": "done"
}


最佳答案

您可以使用以下方法重写 list 方法:

from rest_framework.response import Response

class ListFolders(ListAPIView):
queryset = Folder.objects.all()
serializer_class = FolderSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = ['id', 'name']

def <strong>list</strong>(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())

page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)

serializer = self.get_serializer(queryset, many=True)
return Response(<strong>{</strong>
'status': 'success',
'data': serializer.data,
'msg': 'done'
<strong>}</strong>)

或者我们可以使用 super 调用并覆盖数据,因此:

class ListFolders(ListAPIView):
queryset = Folder.objects.all()
serializer_class = FolderSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = ['id', 'name']

def list(self, request, *args, **kwargs):
response = super().list(request, *args, **kwargs)
response<strong>.data = {'status': 'success', 'data': response.data, 'msg': 'done'}</strong>
return response

如果某些 mixin 覆盖 list 逻辑,这也将起作用,因此从软件设计的角度来看,这可能会更好。

关于django-rest-framework - 如何在 django 的 ListAPIView 中返回自定义响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71456029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com