fix tags exclude filter behaviour (#1246)

* fix tags exclude filter behaviour
master
hecfernandez 2019-02-13 14:20:04 +01:00 committed by Alex Hermida
parent d6d3f8c6a8
commit 120442206b
2 changed files with 19 additions and 2 deletions

View File

@ -515,8 +515,13 @@ class TagsFilter(FilterBackend):
def _prepare_filter_query(self, query):
return Q(tags__contains=query)
def _prepare_exclude_query(self, query):
return ~Q(tags__contains=query)
def _prepare_exclude_query(self, tags):
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):
operations = {

View File

@ -476,6 +476,18 @@ def test_api_filters(client, filter_name, collection, expected, 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):
data = create_filter_issues_context()
project = data["project"]