Django SearchFilter 在搜索字段为空时显示所有数据

Django SearchFilter is displaying all the data when the search field is empty

我已经使用 Django SearchFilter DRF 实现了搜索功能,它运行良好,但问题是我不想在搜索字段中未传递任何内容时显示所有查询。它默认返回所有查询。不知道怎么办。

views.py

    class EventSearchView(generics.ListAPIView):
          permission_classes = (AllowAny,)
          queryset = Event.objects.all()
          search_fields = ["name", "description","content"]
          filter_backends = (filters.SearchFilter,)
          serializer_class = EventSearchSerializer
          pagination_class = LargeResultsSetPagination

当我搜索字段 "name"、"description" 时,它工作正常,但是当我什么都不搜索并默认点击没有搜索字段的 url 时,它会返回所有查询,但我不想显示任何内容。

我怎样才能做到这一点?

尝试覆盖 get_queryset 方法来检查 query_params 是否包含数据:

class EventSearchView(generics.ListAPIView):
    permission_classes = (AllowAny,)    
    search_fields = ["name", "description","content"]
    filter_backends = (filters.SearchFilter,)
    serializer_class = EventSearchSerializer
    pagination_class = LargeResultsSetPagination

    def get_queryset(self):
        if self.request.query_params:    
            return Event.objects.all()
    return Event.objects.none()

另一种方法是使用过滤器 class。只需在任何地方定义它。

from django_filters import rest_framework as filters

class ContentFilter(filters.FilterSet):
    name = filters.CharFilter(required=True)

    class Meta:
    model = <your_model>
    fields = ['name']

您可以将其添加到您的视图中:

filterset_class = ContentFilter

现在您的姓名参数将是必需的,没有它没有人可以获取您的请求。 这是更好的方法,因为如果用户忘记发送参数,他会收到错误消息而不是空白响应。