Django 自定义 SearchFilter兼容空格搜索

前言

Django 自带的 SearchFilter 是不支持空格搜索的,如果需要支持空格搜索并且保留之前的搜索功能则需要自定义 SearchFilter。

自定义 SearchFilter

继承 SeachFilter 然后实现 get_search_terms 方法,如果同时支持 space 然后又可以保持之前的搜索特性呢?

简单的做法就是,对输入的参数进行校验,如果只有含有空格就返回空格,否则就执行之前的搜索逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class CanSerachBothCharFilter(SearchFilter):

def get_search_terms(self, request):
params = request.query_params.get(self.search_param, '')
# 判断原来的参数是否有只有空格
only_space = False
if len(params) != 0 and len(params.strip()) == 0:
only_space = True

params = params.replace('\x00', '') # strip null characters
params = params.replace(',', ' ')
if only_space:
return [params]
return params.split()