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()
答案 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()