fixes #2835 - certain model filters did not support the q query param

This commit is contained in:
John Anderson
2019-01-31 13:36:30 -05:00
parent 59f8f0c7ea
commit 613e8f05c2
8 changed files with 67 additions and 47 deletions

View File

@@ -1,4 +1,5 @@
import django_filters
from django.db.models import Q
from taggit.models import Tag
@@ -35,3 +36,21 @@ class TagFilter(django_filters.ModelMultipleChoiceFilter):
kwargs.setdefault('queryset', Tag.objects.all())
super().__init__(*args, **kwargs)
class NameSlugSearchFilterSet(django_filters.FilterSet):
"""
A base class for adding the search method to models which only expose the `name` and `slug` fields
"""
q = django_filters.CharFilter(
method='search',
label='Search',
)
def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(name__icontains=value) |
Q(slug__icontains=value)
)