Adding multiple status filtering to userstories

remotes/origin/enhancement/email-actions
Alejandro Alonso 2015-06-09 15:06:51 +02:00
parent a77f21776f
commit acbd253420
3 changed files with 43 additions and 3 deletions

View File

@ -364,6 +364,26 @@ class TagsFilter(FilterBackend):
return super().filter_queryset(request, queryset, view)
class StatusFilter(FilterBackend):
def __init__(self, filter_name='status'):
self.filter_name = filter_name
def _get_status_queryparams(self, params):
status = params.get(self.filter_name, None)
if status is not None:
status = set([x.strip() for x in status.split(",")])
return list(status)
return None
def filter_queryset(self, request, queryset, view):
query_status = self._get_status_queryparams(request.QUERY_PARAMS)
if query_status:
queryset = queryset.filter(status__in=query_status)
return super().filter_queryset(request, queryset, view)
class QFilter(FilterBackend):
def filter_queryset(self, request, queryset, view):
q = request.QUERY_PARAMS.get('q', None)

View File

@ -50,10 +50,11 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi
list_serializer_class = serializers.UserStorySerializer
permission_classes = (permissions.UserStoryPermission,)
filter_backends = (filters.CanViewUsFilterBackend, filters.TagsFilter,
filter_backends = (filters.StatusFilter, filters.CanViewUsFilterBackend, filters.TagsFilter,
filters.QFilter, filters.OrderByFilterMixin)
retrieve_exclude_filters = (filters.TagsFilter,)
filter_fields = ["project", "milestone", "milestone__isnull", "status",
retrieve_exclude_filters = (filters.StatusFilter, filters.TagsFilter,)
filter_fields = ["project", "milestone", "milestone__isnull",
"is_archived", "status__is_archived", "assigned_to",
"status__is_closed", "watchers", "is_closed"]
order_by_fields = ["backlog_order", "sprint_order", "kanban_order"]

View File

@ -214,6 +214,25 @@ def test_archived_filter(client):
assert len(json.loads(response.content)) == 1
def test_filter_by_multiple_status(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.UserStoryFactory.create(project=project)
us1 = f.UserStoryFactory.create(project=project)
us2 = f.UserStoryFactory.create(project=project)
client.login(user)
url = reverse("userstories-list")
url = "{}?status={},{}".format(reverse("userstories-list"), us1.status.id, us2.status.id)
data = {}
response = client.get(url, data)
assert len(json.loads(response.content)) == 2
def test_get_total_points(client):
project = f.ProjectFactory.create()