diff --git a/cookbook/filters.py b/cookbook/filters.py index 88e4c94b7..edfaa7dae 100644 --- a/cookbook/filters.py +++ b/cookbook/filters.py @@ -1,18 +1,26 @@ import django_filters +from django.conf import settings from django.contrib.postgres.search import TrigramSimilarity from django.db.models import Q -from cookbook.forms import MultiSelectWidget -from cookbook.models import Recipe, Keyword, Food, ShoppingList -from django.conf import settings from django.utils.translation import gettext as _ +from cookbook.forms import MultiSelectWidget +from cookbook.models import Food, Keyword, Recipe, ShoppingList + class RecipeFilter(django_filters.FilterSet): name = django_filters.CharFilter(method='filter_name') - keywords = django_filters.ModelMultipleChoiceFilter(queryset=Keyword.objects.all(), widget=MultiSelectWidget, - method='filter_keywords') - foods = django_filters.ModelMultipleChoiceFilter(queryset=Food.objects.all(), widget=MultiSelectWidget, - method='filter_foods', label=_('Ingredients')) + keywords = django_filters.ModelMultipleChoiceFilter( + queryset=Keyword.objects.all(), + widget=MultiSelectWidget, + method='filter_keywords' + ) + foods = django_filters.ModelMultipleChoiceFilter( + queryset=Food.objects.all(), + widget=MultiSelectWidget, + method='filter_foods', + label=_('Ingredients') + ) @staticmethod def filter_keywords(queryset, name, value): @@ -27,16 +35,20 @@ class RecipeFilter(django_filters.FilterSet): if not name == 'foods': return queryset for x in value: - queryset = queryset.filter(steps__ingredients__food__name=x).distinct() + queryset = queryset.filter( + steps__ingredients__food__name=x + ).distinct() return queryset @staticmethod def filter_name(queryset, name, value): if not name == 'name': return queryset - if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.postgresql_psycopg2': - queryset = queryset.annotate(similarity=TrigramSimilarity('name', value), ).filter( - Q(similarity__gt=0.1) | Q(name__icontains=value)).order_by('-similarity') + if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.postgresql_psycopg2': # noqa: E501 + queryset = queryset \ + .annotate(similarity=TrigramSimilarity('name', value), ) \ + .filter(Q(similarity__gt=0.1) | Q(name__icontains=value)) \ + .order_by('-similarity') else: queryset = queryset.filter(name__icontains=value) return queryset