diff --git a/cookbook/filters.py b/cookbook/filters.py index 35b742418..9e196005f 100644 --- a/cookbook/filters.py +++ b/cookbook/filters.py @@ -2,14 +2,17 @@ import django_filters from django.contrib.postgres.search import TrigramSimilarity from django.db.models import Q from cookbook.forms import MultiSelectWidget -from cookbook.models import Recipe, Keyword +from cookbook.models import Recipe, Keyword, Ingredient from django.conf import settings +from django.utils.translation import gettext as _ 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') + ingredients = django_filters.ModelMultipleChoiceFilter(queryset=Ingredient.objects.all(), widget=MultiSelectWidget, + method='filter_ingredients', label=_('Ingredients')) @staticmethod def filter_keywords(queryset, name, value): @@ -19,6 +22,14 @@ class RecipeFilter(django_filters.FilterSet): queryset = queryset.filter(keywords=x) return queryset + @staticmethod + def filter_ingredients(queryset, name, value): + if not name == 'ingredients': + return queryset + for x in value: + queryset = queryset.filter(recipeingredient__ingredient=x).distinct() + return queryset + @staticmethod def filter_name(queryset, name, value): if not name == 'name': @@ -32,14 +43,4 @@ class RecipeFilter(django_filters.FilterSet): class Meta: model = Recipe - fields = ['name', 'keywords'] - - -class QuickRecipeFilter(django_filters.FilterSet): - name = django_filters.CharFilter(lookup_expr='icontains') - keywords = django_filters.ModelMultipleChoiceFilter(queryset=Keyword.objects.all(), widget=MultiSelectWidget, - method='filter_keywords') - - class Meta: - model = Recipe - fields = ['name', 'keywords'] + fields = ['name', 'keywords', 'ingredients'] diff --git a/cookbook/templates/index.html b/cookbook/templates/index.html index c358a8af0..335a89a2e 100644 --- a/cookbook/templates/index.html +++ b/cookbook/templates/index.html @@ -46,6 +46,9 @@