首页 > 解决方案 > Django - 我如何返回 json 响应错误?

问题描述

我使用 Django Rest Framework 创建了一个简单的 API 端点,并创建了一个非常基本的逻辑,如果用户不提供任何过滤器,API 需要返回一个自定义错误,例如{'error': 'no parameter provided'}. 我的代码的问题是我不断收到此错误:object of type 'JsonResponse' has no len().

这是我的代码:

class WS_View(viewsets.ModelViewSet):
    pagination_class = StandardResultsSetPagination
    http_method_names = ['get']
    serializer_class = WS_Serializer

    def get_queryset(self):

        valid_filters = {
            ...
        }

        filters = {valid_filters[key]: value for key, value in self.request.query_params.items() if key in valid_filters.keys()}

        #If there are filters, execute the query
        if len(filters) > 0:
            queryset = WS.objects.filter(**filters)
            return queryset
        #If there isn't any filter, return an error
        else:
            return JsonResponse({"error": "no parameter required"})

现在我知道我收到了这个错误,因为我应该返回一个查询集,而 JsonResponse 当然不是查询集,但我不知道如何实际解决这个问题。任何建议表示赞赏!

标签: pythondjango

解决方案


正如您已经意识到的那样,get_queryset 期望(正如其名称所暗示的)一个查询集。所以解决方案是在这里提出一个异常:

from rest_framework.exceptions import NotFound

class WS_View(viewsets.ModelViewSet):
   #...
    def get_queryset(self):
        #...
        if len(filters) > 0:
            queryset = WS.objects.filter(**filters)
        else:
            raise NotFound("no parameter required")

我使用了 NotFound,但您可以在 DRF 文档中找到可能更适合您的异常列表。


推荐阅读