Skip to content

Commit

Permalink
Showing 2 changed files with 16 additions and 12 deletions.
25 changes: 13 additions & 12 deletions cookbook/filters.py
Original file line number Diff line number Diff line change
@@ -2,14 +2,17 @@
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 @@ def filter_keywords(queryset, name, value):
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 @@ def filter_name(queryset, name, value):

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']
3 changes: 3 additions & 0 deletions cookbook/templates/index.html
Original file line number Diff line number Diff line change
@@ -46,6 +46,9 @@
<div>
{{ filter.form.keywords | as_crispy_field }}
</div>
<div>
{{ filter.form.ingredients | as_crispy_field }}
</div>
</div>
</div>
</form>

0 comments on commit 4843568

Please sign in to comment.