Compare commits

...

1 Commits
ci ... master

Author SHA1 Message Date
hecfernandez 120442206b fix tags exclude filter behaviour (#1246)
* fix tags exclude filter behaviour
2019-02-13 14:20:04 +01:00
2 changed files with 19 additions and 2 deletions

View File

@ -515,8 +515,13 @@ class TagsFilter(FilterBackend):
def _prepare_filter_query(self, query): def _prepare_filter_query(self, query):
return Q(tags__contains=query) return Q(tags__contains=query)
def _prepare_exclude_query(self, query): def _prepare_exclude_query(self, tags):
return ~Q(tags__contains=query) queries = [Q(tags__contains=[tag]) for tag in tags]
query = queries.pop()
for item in queries:
query |= item
return ~Q(query)
def filter_queryset(self, request, queryset, view): def filter_queryset(self, request, queryset, view):
operations = { operations = {

View File

@ -476,6 +476,18 @@ def test_api_filters(client, filter_name, collection, expected, exclude_expected
assert len(response.data) == exclude_expected assert len(response.data) == exclude_expected
def test_mulitple_exclude_filter_tags(client):
data = create_filter_issues_context()
project = data["project"]
client.login(data["users"][0])
tags = data["tags"]
url = "{}?project={}&exclude_tags={},{}".format(reverse('issues-list'), project.id, tags[1], tags[2])
response = client.get(url)
assert response.status_code == 200
assert len(response.data) == 4
def test_api_filters_data(client): def test_api_filters_data(client):
data = create_filter_issues_context() data = create_filter_issues_context()
project = data["project"] project = data["project"]