Merge pull request #10 from shamoon/feature/any-all-filtering

Feature: any / all filtering with tags
This commit is contained in:
shamoon
2022-02-19 14:52:55 -08:00
committed by GitHub
13 changed files with 183 additions and 41 deletions

View File

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

View File

@@ -387,7 +387,8 @@ class SavedViewFilterRule(models.Model):
(18, _("does not have ASN")),
(19, _("title or content contains")),
(20, _("fulltext query")),
(21, _("more like this"))
(21, _("more like this")),
(22, _("has tags in"))
]
saved_view = models.ForeignKey(