Django DRF必需的搜索筛选器

Django DRF必需的搜索筛选器,django,django-rest-framework,django-filter,Django,Django Rest Framework,Django Filter,我有一个工作正常的视图集 class PlayerViewSet(ModelViewSet): queryset = Player.objects.all() serializer_class = PlayerSerializer filter_backends = [SearchFilter] search_fields = ['nickname'] Url配置: path('player', PlayerViewSet.as_view({'g

我有一个工作正常的视图集

class PlayerViewSet(ModelViewSet):
     queryset = Player.objects.all()
     serializer_class = PlayerSerializer
     filter_backends = [SearchFilter]
     search_fields = ['nickname']
Url配置:

    path('player', PlayerViewSet.as_view({'get': 'list', 'post': 'create'})),
当我尝试使用端点搜索对象时,一切都很好,比如:'player?search=randomNickname'

但有可能在不使用搜索参数的情况下发送GET请求,并返回所有可能的对象


有什么方法可以根据需要设置搜索字段吗?

因为
ModelViewSet
可以执行各种操作(获取、更新、删除..)。最好扩展
SearchFilter
并使其在未传递搜索参数或出现错误时返回空结果

from rest_framework import filters
from rest_framework.exceptions import ValidationError


class CustomSearchFilter(filters.SearchFilter):
    def filter_queryset(self, request, queryset, view):
        search_terms = self.get_search_terms(request)

        if not search_terms:
            # turn queryset in EmptyQuerySet
            # so no objects will be returned
            return queryset.none()

            # Alternatively, an error can be raise  
            #raise ValidationError(
            #    "%s parameter is required!" % self.search_param
            #)

        return super().filter_queryset(request, queryset, view)


class PlayerViewSet(ModelViewSet):
    queryset = Player.objects.all()
    serializer_class = PlayerSerializer
    filter_backends = [CustomSearchFilter]
    search_fields = ['nickname']

由于
ModelViewSet
可以执行各种操作(获取、更新、删除..),因此最好扩展
SearchFilter
并使其在未传递搜索参数或出现错误时返回空结果

from rest_framework import filters
from rest_framework.exceptions import ValidationError


class CustomSearchFilter(filters.SearchFilter):
    def filter_queryset(self, request, queryset, view):
        search_terms = self.get_search_terms(request)

        if not search_terms:
            # turn queryset in EmptyQuerySet
            # so no objects will be returned
            return queryset.none()

            # Alternatively, an error can be raise  
            #raise ValidationError(
            #    "%s parameter is required!" % self.search_param
            #)

        return super().filter_queryset(request, queryset, view)


class PlayerViewSet(ModelViewSet):
    queryset = Player.objects.all()
    serializer_class = PlayerSerializer
    filter_backends = [CustomSearchFilter]
    search_fields = ['nickname']