diff --git a/backend/dvadmin/system/views/user.py b/backend/dvadmin/system/views/user.py index 78a86ea..23bb19a 100644 --- a/backend/dvadmin/system/views/user.py +++ b/backend/dvadmin/system/views/user.py @@ -251,9 +251,9 @@ class UserViewSet(CustomModelViewSet): update_serializer_class = UserUpdateSerializer # filter_fields = ["name", "username", "gender", "is_active", "dept", "user_type"] filter_fields = { - "name": ["exact"], - "mobile": ["exact"], - "username": ["exact"], + "name": ["icontains"], + "mobile": ["icontains"], + "username": ["icontains"], "gender": ["icontains"], "is_active": ["icontains"], "dept": ["exact"], diff --git a/backend/dvadmin/utils/filters.py b/backend/dvadmin/utils/filters.py index 4e157be..6e34639 100644 --- a/backend/dvadmin/utils/filters.py +++ b/backend/dvadmin/utils/filters.py @@ -154,12 +154,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): @@ -239,7 +241,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) @@ -288,7 +293,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)