当drf使用ListAPIView返回空查询集时,如何返回404

时间:2018-04-09 17:49:51

标签: django django-rest-framework

class listapiview(ListAPIView):

    queryset = testobj.objects.all()
    serializer_class = testobjSerializer
    def get_queryset(self):
        queryset = testobj.objects.all()
        build_id = self.request.query_params.get('id', None)
        if id is not None:
            queryset = queryset.filter(id=id)
        return queryset

我刚刚从APIView重写了一些视图到ListAPIView,它打破了我的一些单元测试,因为一个空的查询集仍然返回200.我想找出返回404的最佳方法(或任何相应的错误代码将是在这里)使用我的例子。

我尝试添加:

if queryset:
    return queryset
else:
    return Response(status=status.HTTP_404_NOT_FOUND)

但收到了一个分页器错误:

TypeError: object of type 'Response' has no len()

2 个答案:

答案 0 :(得分:0)

您可以使用

return HttpResponseNotFound('<h1>Page not found</h1>')

对不起格式化,在手机上

答案 1 :(得分:0)

引发异常,而不是返回Response

django rest框架在NotFound模块中有多个预定义的异常,例如exception异常。您可以通过从异常

导入它来添加它
from rest_framework.exceptions import NotFound 

并通过以下代码

修改您的get_queryset逻辑
if queryset:
    return queryset
else:
    raise NotFound()