refactor exclude filter mode implementation
parent
7c5ba16d24
commit
2b38fefa13
|
@ -414,16 +414,22 @@ class BaseRelatedFieldsFilter(FilterBackend):
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _prepare_filter_query(self, query):
|
||||||
|
return query
|
||||||
|
|
||||||
|
def _prepare_exclude_query(self, query):
|
||||||
|
return ~Q(query)
|
||||||
|
|
||||||
def filter_queryset(self, request, queryset, view):
|
def filter_queryset(self, request, queryset, view):
|
||||||
operations = {
|
operations = {
|
||||||
"filter": queryset.filter,
|
"filter": self._prepare_filter_query,
|
||||||
"exclude": queryset.exclude,
|
"exclude": self._prepare_exclude_query,
|
||||||
}
|
}
|
||||||
|
|
||||||
for mode, qs_method in operations.items():
|
for mode, prepare_method in operations.items():
|
||||||
query = self._get_queryparams(request.QUERY_PARAMS, mode=mode)
|
query = self._get_queryparams(request.QUERY_PARAMS, mode=mode)
|
||||||
if query:
|
if query:
|
||||||
queryset = qs_method(query)
|
queryset = queryset.filter(prepare_method(query))
|
||||||
|
|
||||||
return super().filter_queryset(request, queryset, view)
|
return super().filter_queryset(request, queryset, view)
|
||||||
|
|
||||||
|
@ -506,16 +512,16 @@ class TagsFilter(FilterBackend):
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def prepare_filter(self, query):
|
def _prepare_filter_query(self, query):
|
||||||
return Q(tags__contains=query)
|
return Q(tags__contains=query)
|
||||||
|
|
||||||
def prepare_exclude(self, query):
|
def _prepare_exclude_query(self, query):
|
||||||
return ~Q(tags__contains=query)
|
return ~Q(tags__contains=query)
|
||||||
|
|
||||||
def filter_queryset(self, request, queryset, view):
|
def filter_queryset(self, request, queryset, view):
|
||||||
operations = {
|
operations = {
|
||||||
"filter": self.prepare_filter,
|
"filter": self._prepare_filter_query,
|
||||||
"exclude": self.prepare_exclude,
|
"exclude": self._prepare_exclude_query,
|
||||||
}
|
}
|
||||||
|
|
||||||
for mode, prepare_method in operations.items():
|
for mode, prepare_method in operations.items():
|
||||||
|
@ -666,8 +672,8 @@ class RoleFilter(BaseRelatedFieldsFilter):
|
||||||
Membership = apps.get_model('projects', 'Membership')
|
Membership = apps.get_model('projects', 'Membership')
|
||||||
|
|
||||||
operations = {
|
operations = {
|
||||||
"filter": queryset.filter,
|
"filter": self._prepare_filter_query,
|
||||||
"exclude": queryset.exclude,
|
"exclude": self._prepare_exclude_query,
|
||||||
}
|
}
|
||||||
|
|
||||||
for mode, qs_method in operations.items():
|
for mode, qs_method in operations.items():
|
||||||
|
@ -675,7 +681,7 @@ class RoleFilter(BaseRelatedFieldsFilter):
|
||||||
if query:
|
if query:
|
||||||
memberships = Membership.objects.filter(query).exclude(user__isnull=True).values_list("user_id", flat=True)
|
memberships = Membership.objects.filter(query).exclude(user__isnull=True).values_list("user_id", flat=True)
|
||||||
if memberships:
|
if memberships:
|
||||||
queryset = qs_method(assigned_to__in=memberships)
|
queryset = queryset.filter(qs_method(Q(assigned_to__in=memberships)))
|
||||||
|
|
||||||
return FilterBackend.filter_queryset(self, request, queryset, view)
|
return FilterBackend.filter_queryset(self, request, queryset, view)
|
||||||
|
|
||||||
|
@ -689,8 +695,8 @@ class UserStoriesRoleFilter(FilterModelAssignedUsers, BaseRelatedFieldsFilter):
|
||||||
Membership = apps.get_model('projects', 'Membership')
|
Membership = apps.get_model('projects', 'Membership')
|
||||||
|
|
||||||
operations = {
|
operations = {
|
||||||
"filter": queryset.filter,
|
"filter": self._prepare_filter_query,
|
||||||
"exclude": queryset.exclude,
|
"exclude": self._prepare_exclude_query,
|
||||||
}
|
}
|
||||||
|
|
||||||
for mode, qs_method in operations.items():
|
for mode, qs_method in operations.items():
|
||||||
|
@ -699,6 +705,8 @@ class UserStoriesRoleFilter(FilterModelAssignedUsers, BaseRelatedFieldsFilter):
|
||||||
memberships = Membership.objects.filter(query).exclude(user__isnull=True).values_list("user_id", flat=True)
|
memberships = Membership.objects.filter(query).exclude(user__isnull=True).values_list("user_id", flat=True)
|
||||||
if memberships:
|
if memberships:
|
||||||
user_story_model = apps.get_model("userstories", "UserStory")
|
user_story_model = apps.get_model("userstories", "UserStory")
|
||||||
queryset = qs_method(self.get_assigned_users_filter(user_story_model, memberships))
|
queryset = queryset.filter(
|
||||||
|
qs_method(Q(self.get_assigned_users_filter(user_story_model, memberships)))
|
||||||
|
)
|
||||||
|
|
||||||
return FilterBackend.filter_queryset(self, request, queryset, view)
|
return FilterBackend.filter_queryset(self, request, queryset, view)
|
||||||
|
|
Loading…
Reference in New Issue