From 31f20a766f874fc427b3d61726a06e3155f0b523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Sun, 28 May 2023 13:24:38 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=F0=9F=90=9B=20filter=5Ffields=E4=BD=BF?= =?UTF-8?q?=E7=94=A8exact=E6=97=A0=E6=95=88=EF=BC=8C=E4=BD=BF=E7=94=A8icon?= =?UTF-8?q?tains=E7=AD=89=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: https://gitee.com/liqianglog/django-vue-admin/issues/I6QZW5 --- backend/dvadmin/utils/filters.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/backend/dvadmin/utils/filters.py b/backend/dvadmin/utils/filters.py index 21f23b4..f129945 100644 --- a/backend/dvadmin/utils/filters.py +++ b/backend/dvadmin/utils/filters.py @@ -164,12 +164,14 @@ class CustomDjangoFilterBackend(DjangoFilterBackend): "~": "icontains", } - def construct_search(self, field_name): + def construct_search(self, field_name, lookup_expr=None): lookup = self.lookup_prefixes.get(field_name[0]) if lookup: field_name = field_name[1:] else: - lookup = "icontains" + lookup = lookup_expr + if field_name.endswith(lookup): + return field_name return LOOKUP_SEP.join([field_name, lookup]) def find_filter_lookups(self, orm_lookups, search_term_key): @@ -249,7 +251,10 @@ class CustomDjangoFilterBackend(DjangoFilterBackend): # warn if the field doesn't exist. if field is None: undefined.append(field_name) - + # 更新默认字符串搜索为模糊搜索 + if isinstance(field, (models.CharField)) and filterset_fields == '__all__' and lookups == [ + 'exact']: + lookups = ['icontains'] for lookup_expr in lookups: filter_name = cls.get_filter_name(field_name, lookup_expr) @@ -298,7 +303,7 @@ class CustomDjangoFilterBackend(DjangoFilterBackend): for search_field in filterset.filters: if isinstance(filterset.filters[search_field], CharFilter): orm_lookups.append( - self.construct_search(six.text_type(search_field)) + self.construct_search(six.text_type(search_field), filterset.filters[search_field].lookup_expr) ) else: orm_lookups.append(search_field)