refactor tags exclude filter implementation
parent
4bb12d73d9
commit
b0d065167c
|
@ -501,22 +501,27 @@ class TagsFilter(FilterBackend):
|
||||||
def _get_tags_queryparams(self, params, mode=''):
|
def _get_tags_queryparams(self, params, mode=''):
|
||||||
param_name = self.exclude_param_name if mode == "exclude" else self.filter_name
|
param_name = self.exclude_param_name if mode == "exclude" else self.filter_name
|
||||||
tags = params.get(param_name, None)
|
tags = params.get(param_name, None)
|
||||||
|
|
||||||
if tags:
|
if tags:
|
||||||
return tags.split(",")
|
return tags.split(",")
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def prepare_filter(self, query, queryset):
|
||||||
|
return queryset.filter(tags__contains=query)
|
||||||
|
|
||||||
|
def prepare_exclude(self, query, queryset):
|
||||||
|
return queryset.filter(~Q(tags__contains=query))
|
||||||
|
|
||||||
def filter_queryset(self, request, queryset, view):
|
def filter_queryset(self, request, queryset, view):
|
||||||
operations = {
|
operations = {
|
||||||
"filter": queryset.filter,
|
"filter": self.prepare_filter,
|
||||||
"exclude": queryset.exclude,
|
"exclude": self.prepare_exclude,
|
||||||
}
|
}
|
||||||
|
|
||||||
for mode, qs_method in operations.items():
|
for mode, qs_method in operations.items():
|
||||||
query = self._get_tags_queryparams(request.QUERY_PARAMS, mode=mode)
|
query = self._get_tags_queryparams(request.QUERY_PARAMS, mode=mode)
|
||||||
if query:
|
if query:
|
||||||
queryset = qs_method(tags__contains=query)
|
queryset = qs_method(query, queryset)
|
||||||
|
|
||||||
return super().filter_queryset(request, queryset, view)
|
return super().filter_queryset(request, queryset, view)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue