added searching for ingredients
This commit is contained in:
@ -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']
|
|
||||||
|
@ -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>
|
||||||
|
Reference in New Issue
Block a user