Update API filters for "any" tag_id

This commit is contained in:
Michael Shamoon 2021-01-20 18:35:03 -08:00
parent 79059b9aa7
commit 893dcd9f28

View File

@ -37,9 +37,10 @@ class DocumentTypeFilterSet(FilterSet):
class TagsFilter(Filter): class TagsFilter(Filter):
def __init__(self, exclude=False): def __init__(self, exclude=False, in_list=False):
super(TagsFilter, self).__init__() super(TagsFilter, self).__init__()
self.exclude = exclude self.exclude = exclude
self.in_list = in_list
def filter(self, qs, value): def filter(self, qs, value):
if not value: if not value:
@ -50,11 +51,14 @@ class TagsFilter(Filter):
except ValueError: except ValueError:
return qs return qs
for tag_id in tag_ids: if self.in_list:
if self.exclude: qs = qs.filter(tags__id__in=tag_ids).distinct()
qs = qs.exclude(tags__id=tag_id) else:
else: for tag_id in tag_ids:
qs = qs.filter(tags__id=tag_id) if self.exclude:
qs = qs.exclude(tags__id=tag_id)
else:
qs = qs.filter(tags__id=tag_id)
return qs return qs
@ -83,6 +87,8 @@ class DocumentFilterSet(FilterSet):
tags__id__none = TagsFilter(exclude=True) tags__id__none = TagsFilter(exclude=True)
tags__id__in = TagsFilter(in_list=True)
is_in_inbox = InboxFilter() is_in_inbox = InboxFilter()
class Meta: class Meta: