diff --git a/apps/common/drf/filters.py b/apps/common/drf/filters.py index 4166145ee..58622e91c 100644 --- a/apps/common/drf/filters.py +++ b/apps/common/drf/filters.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- # +from rest_framework.filters import SearchFilter as SearchFilterBase import base64 import json import logging @@ -35,6 +36,14 @@ __all__ = [ ] +class SearchFilter(SearchFilterBase): + def get_search_terms(self, request): + params = request.query_params.get(self.search_param, '') or request.query_params.get('search', '') + params = params.replace('\x00', '') # strip null characters + params = params.replace(',', ' ') + return params.split() + + class BaseFilterSet(drf_filters.FilterSet): days = drf_filters.NumberFilter(method="filter_days") days__lt = drf_filters.NumberFilter(method="filter_days") diff --git a/apps/jumpserver/settings/libs.py b/apps/jumpserver/settings/libs.py index 65a768493..4ee337065 100644 --- a/apps/jumpserver/settings/libs.py +++ b/apps/jumpserver/settings/libs.py @@ -38,12 +38,12 @@ REST_FRAMEWORK = { ), 'DEFAULT_FILTER_BACKENDS': ( 'django_filters.rest_framework.DjangoFilterBackend', - 'rest_framework.filters.SearchFilter', + 'common.drf.filters.SearchFilter', 'common.drf.filters.RewriteOrderingFilter', ), 'DEFAULT_METADATA_CLASS': 'common.drf.metadata.SimpleMetadataWithFilters', 'ORDERING_PARAM': "order", - 'SEARCH_PARAM': "search", + 'SEARCH_PARAM': "q", 'DATETIME_FORMAT': '%Y/%m/%d %H:%M:%S %z', 'DATETIME_INPUT_FORMATS': ['%Y/%m/%d %H:%M:%S %z', 'iso-8601', '%Y-%m-%d %H:%M:%S %z'], 'DEFAULT_PAGINATION_CLASS': 'jumpserver.rewriting.pagination.MaxLimitOffsetPagination',