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
我刚刚将一些 View 从 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()
最佳答案
引发异常而不是返回响应
django Rest框架在其exception
模块中有多个预定义的异常,例如NotFound
异常。您可以通过从异常中导入来添加它
from rest_framework.exceptions import NotFound
并通过以下代码修改您的get_queryset
逻辑
if queryset:
return queryset
else:
raise NotFound()
关于django - 当 drf 使用 ListAPIView 返回空查询集时如何返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49738795/