Django 当drf使用ListAPIView返回空queryset时,如何返回404
我刚刚将一些视图从APIView重写到ListAPIView,它破坏了我的一些单元测试,因为一个空的queryset仍然返回一个200。我想通过我的示例找出返回404(或任何适当的错误代码)的最佳方法 我试着加上:Django 当drf使用ListAPIView返回空queryset时,如何返回404,django,django-rest-framework,Django,Django Rest Framework,我刚刚将一些视图从APIView重写到ListAPIView,它破坏了我的一些单元测试,因为一个空的queryset仍然返回一个200。我想通过我的示例找出返回404(或任何适当的错误代码)的最佳方法 我试着加上: class listapiview(ListAPIView): queryset = testobj.objects.all() serializer_class = testobjSerializer def get_queryset(self):
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
但收到一个分页器错误:
if queryset:
return queryset
else:
return Response(status=status.HTTP_404_NOT_FOUND)
你可以使用
返回HttpResponseNotFound('Page not found')
很抱歉格式化,在移动设备上引发异常,而不是返回
响应
django rest框架在其exception
模块中有多个预定义的异常,例如NotFound
exception。您可以通过从异常导入来添加它
TypeError: object of type 'Response' has no len()
并通过以下代码修改您的get\u queryset
逻辑
from rest_framework.exceptions import NotFound
为什么要在列表视图上显示404?我不确定是否要执行tbh,我要做的只是在queryset为空时不返回200个成功值……好吧,
get\u queryset
函数期望的是queryset
而不是响应。如果你想合并这个,你可以提出一个例外,就像其中一个答案所建议的那样。
if queryset:
return queryset
else:
raise NotFound()