Add US id's filter
parent
dcc89514de
commit
3830d8a346
|
@ -423,6 +423,29 @@ class BaseRelatedFieldsFilter(FilterBackend):
|
|||
return super().filter_queryset(request, queryset, view)
|
||||
|
||||
|
||||
class IdsFilter(FilterBackend):
|
||||
filter_name = 'id__in'
|
||||
|
||||
def __init__(self, filter_name=None):
|
||||
if filter_name:
|
||||
self.filter_name = filter_name
|
||||
|
||||
def _get_id_queryparams(self, params):
|
||||
ids = params.get(self.filter_name, None)
|
||||
if ids:
|
||||
return ids.split(",")
|
||||
|
||||
return None
|
||||
|
||||
def filter_queryset(self, request, queryset, view):
|
||||
query_ids = self._get_id_queryparams(request.QUERY_PARAMS)
|
||||
|
||||
if query_ids:
|
||||
queryset = queryset.filter(id__in=query_ids)
|
||||
|
||||
return super().filter_queryset(request, queryset, view)
|
||||
|
||||
|
||||
class OwnersFilter(BaseRelatedFieldsFilter):
|
||||
filter_name = 'owner'
|
||||
|
||||
|
|
|
@ -65,6 +65,7 @@ class UserStoryViewSet(AssignedUsersSignalMixin, OCCResourceMixin,
|
|||
permission_classes = (permissions.UserStoryPermission,)
|
||||
filter_backends = (base_filters.CanViewUsFilterBackend,
|
||||
filters.EpicFilter,
|
||||
base_filters.IdsFilter,
|
||||
base_filters.UserStoriesRoleFilter,
|
||||
base_filters.OwnersFilter,
|
||||
base_filters.AssignedToFilter,
|
||||
|
|
|
@ -588,6 +588,23 @@ def test_get_total_points(client):
|
|||
assert us_mixed.get_total_points() == 1.0
|
||||
|
||||
|
||||
def test_api_filter_by_id(client):
|
||||
user = f.UserFactory.create()
|
||||
project = f.ProjectFactory.create(owner=user)
|
||||
f.MembershipFactory.create(project=project, user=user, is_admin=True)
|
||||
us1 = f.UserStoryFactory.create(project=project, subject='Test 1')
|
||||
us2 = f.UserStoryFactory.create(project=project, subject='Test 2')
|
||||
us3 = f.UserStoryFactory.create(project=project, subject='Test 3')
|
||||
|
||||
client.login(user)
|
||||
url = reverse("userstories-list") + "?id__in={},{}".format(us1.id, us3.id)
|
||||
|
||||
response = client.get(url)
|
||||
|
||||
assert len(response.data) == 2
|
||||
assert response.data[1]["subject"] == us3.subject
|
||||
|
||||
|
||||
def test_api_filter_by_created_date(client):
|
||||
user = f.UserFactory(is_superuser=True)
|
||||
one_day_ago = datetime.now(pytz.utc) - timedelta(days=1)
|
||||
|
|
Loading…
Reference in New Issue