在Django Rest框架中,如何处理无效的过滤参数?

在Django Rest框架中,如何处理无效的过滤参数?,django,django-rest-framework,Django,Django Rest Framework,我想使用所描述的过滤技术限制由ListAPIView返回的查询集 问题是,如何处理无效参数?引发ValidationError仅适用于序列化程序,而不适用于ViewSet。我想让用户知道请求无效,而不是默默地失败 例如: class PurchaseList(generics.ListAPIView): serializer_class = PurchaseSerializer def get_queryset(self): queryset = Purchas

我想使用所描述的过滤技术限制由
ListAPIView
返回的查询集

问题是,如何处理无效参数?引发ValidationError仅适用于序列化程序,而不适用于ViewSet。我想让用户知道请求无效,而不是默默地失败

例如:

class PurchaseList(generics.ListAPIView):
    serializer_class = PurchaseSerializer

    def get_queryset(self):
        queryset = Purchase.objects.all()
        username = self.request.query_params.get('username', None)
        if username is not None:
              try:
                  user = User.objects.get(username=username)
              except User.DoesNotExist:
                  # How do I handle this invalid parameter?
              else:
                  queryset = queryset.filter(purchaser=user)
        return queryset

使用内置异常,因为您正在响应未找到的内容,请使用NotFound:

from rest_framework import exceptions

class PurchaseList(generics.ListAPIView):
    serializer_class = PurchaseSerializer

    def get_queryset(self):
        queryset = Purchase.objects.all()
        username = self.request.query_params.get('username', None)
        if username is not None:
              try:
                  user = User.objects.get(username=username)
              except User.DoesNotExist:
                  raise exceptions.NotFound(detail="Some message if you want")
              else:
                  return queryset.filter(purchaser=user)
        return queryset

你不能只返回一个空列表吗

queryset = queryset.filter(purchaser__username=username)

如果用户名无效,此查询集将只是一个空查询集,DRF将在结果中返回一个空列表。

此问题是关于让用户知道请求无效,而不是无声失败。