added searching for ingredients

This commit is contained in:
vabene1111
2020-02-18 23:16:05 +01:00
parent 2e7e4b23dd
commit 4843568d10
2 changed files with 16 additions and 12 deletions

View File

@ -2,14 +2,17 @@ import django_filters
from django.contrib.postgres.search import TrigramSimilarity from django.contrib.postgres.search import TrigramSimilarity
from django.db.models import Q from django.db.models import Q
from cookbook.forms import MultiSelectWidget 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.conf import settings
from django.utils.translation import gettext as _
class RecipeFilter(django_filters.FilterSet): class RecipeFilter(django_filters.FilterSet):
name = django_filters.CharFilter(method='filter_name') name = django_filters.CharFilter(method='filter_name')
keywords = django_filters.ModelMultipleChoiceFilter(queryset=Keyword.objects.all(), widget=MultiSelectWidget, keywords = django_filters.ModelMultipleChoiceFilter(queryset=Keyword.objects.all(), widget=MultiSelectWidget,
method='filter_keywords') method='filter_keywords')
ingredients = django_filters.ModelMultipleChoiceFilter(queryset=Ingredient.objects.all(), widget=MultiSelectWidget,
method='filter_ingredients', label=_('Ingredients'))
@staticmethod @staticmethod
def filter_keywords(queryset, name, value): def filter_keywords(queryset, name, value):
@ -19,6 +22,14 @@ class RecipeFilter(django_filters.FilterSet):
queryset = queryset.filter(keywords=x) queryset = queryset.filter(keywords=x)
return queryset 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 @staticmethod
def filter_name(queryset, name, value): def filter_name(queryset, name, value):
if not name == 'name': if not name == 'name':
@ -32,14 +43,4 @@ class RecipeFilter(django_filters.FilterSet):
class Meta: class Meta:
model = Recipe model = Recipe
fields = ['name', 'keywords'] fields = ['name', 'keywords', 'ingredients']
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']

View File

@ -46,6 +46,9 @@
<div> <div>
{{ filter.form.keywords | as_crispy_field }} {{ filter.form.keywords | as_crispy_field }}
</div> </div>
<div>
{{ filter.form.ingredients | as_crispy_field }}
</div>
</div> </div>
</div> </div>
</form> </form>