refactor: filter_fields支持配置字典及列表格式
parent
a77237ee40
commit
909c8a9324
|
@ -252,12 +252,12 @@ class UserViewSet(CustomModelViewSet):
|
||||||
filter_fields = ["^name", "~username", "^mobile", "is_active", "dept", "user_type", "$dept__name"]
|
filter_fields = ["^name", "~username", "^mobile", "is_active", "dept", "user_type", "$dept__name"]
|
||||||
# filter_fields = {
|
# filter_fields = {
|
||||||
# "name": ["icontains"],
|
# "name": ["icontains"],
|
||||||
# "mobile": ["icontains"],
|
# "mobile": ["iregex"],
|
||||||
# "username": ["icontains"],
|
# "username": ["icontains"],
|
||||||
# "gender": ["icontains"],
|
|
||||||
# "is_active": ["icontains"],
|
# "is_active": ["icontains"],
|
||||||
# "dept": ["exact"],
|
# "dept": ["exact"],
|
||||||
# "user_type": ["exact"],
|
# "user_type": ["exact"],
|
||||||
|
# "dept__name": ["icontains"],
|
||||||
# }
|
# }
|
||||||
search_fields = ["username", "name", "gender", "dept__name", "role__name"]
|
search_fields = ["username", "name", "gender", "dept__name", "role__name"]
|
||||||
# 导出
|
# 导出
|
||||||
|
|
|
@ -173,17 +173,6 @@ class CustomDjangoFilterBackend(DjangoFilterBackend):
|
||||||
return lookup
|
return lookup
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# CASE: 前端query string过滤
|
|
||||||
# def find_filter_lookups(self, orm_lookups, search_term_key):
|
|
||||||
# for lookup, lookup_expr in orm_lookups.items():
|
|
||||||
# # if lookup.find(search_term_key) >= 0:
|
|
||||||
# search_key = self.construct_search(search_term_key, lookup_expr)
|
|
||||||
# new_lookup = LOOKUP_SEP.join(search_key.split(LOOKUP_SEP)[:-1]) if len(search_key.split(LOOKUP_SEP)) > 1 else lookup
|
|
||||||
# # 修复条件搜索错误 bug
|
|
||||||
# if new_lookup == lookup:
|
|
||||||
# return search_key
|
|
||||||
# return None
|
|
||||||
|
|
||||||
def get_filterset_class(self, view, queryset=None):
|
def get_filterset_class(self, view, queryset=None):
|
||||||
"""
|
"""
|
||||||
Return the `FilterSet` class used to filter the queryset.
|
Return the `FilterSet` class used to filter the queryset.
|
||||||
|
@ -347,21 +336,19 @@ class CustomDjangoFilterBackend(DjangoFilterBackend):
|
||||||
return queryset
|
return queryset
|
||||||
if filterset.__class__.__name__ == "AutoFilterSet":
|
if filterset.__class__.__name__ == "AutoFilterSet":
|
||||||
queryset = filterset.queryset
|
queryset = filterset.queryset
|
||||||
# orm_lookups = []
|
orm_lookup_dict = dict(
|
||||||
# for search_field in filterset.filters:
|
zip(
|
||||||
# if isinstance(filterset.filters[search_field], CharFilter):
|
[field for field in self.filter_fields],
|
||||||
# orm_lookups.append(
|
[filterset.filters[lookup].lookup_expr for lookup in filterset.filters.keys()],
|
||||||
# self.construct_search(six.text_type(search_field), filterset.filters[search_field].lookup_expr)
|
)
|
||||||
# )
|
)
|
||||||
# else:
|
orm_lookups = [self.construct_search(lookup, lookup_expr) for lookup, lookup_expr in orm_lookup_dict.items()]
|
||||||
# orm_lookups.append(search_field)
|
# print(orm_lookups)
|
||||||
orm_lookups = [self.construct_search(str(search_field)) for search_field in self.filter_fields]
|
|
||||||
# CASE: 前端query string过滤
|
|
||||||
# orm_lookups = {lookup: filterset.filters[lookup].lookup_expr for lookup in filterset.filters.keys()}
|
|
||||||
conditions = []
|
conditions = []
|
||||||
queries = []
|
queries = []
|
||||||
for search_term_key in filterset.data.keys():
|
for search_term_key in filterset.data.keys():
|
||||||
orm_lookup = self.find_filter_lookups(orm_lookups, search_term_key)
|
orm_lookup = self.find_filter_lookups(orm_lookups, search_term_key)
|
||||||
|
# print(search_term_key, orm_lookup)
|
||||||
if not orm_lookup:
|
if not orm_lookup:
|
||||||
continue
|
continue
|
||||||
query = Q(**{orm_lookup: filterset.data[search_term_key]})
|
query = Q(**{orm_lookup: filterset.data[search_term_key]})
|
||||||
|
|
Loading…
Reference in New Issue