From a4f715997edce5f6974778d2c20cef49a0c54653 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Sun, 8 Dec 2019 17:42:12 +0100 Subject: [PATCH] testing similarity --- cookbook/filters.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/cookbook/filters.py b/cookbook/filters.py index b0a7127d..740c10c8 100644 --- a/cookbook/filters.py +++ b/cookbook/filters.py @@ -1,11 +1,12 @@ 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 class RecipeFilter(django_filters.FilterSet): - name = django_filters.CharFilter(lookup_expr='icontains') + name = django_filters.CharFilter(method='filter_name') keywords = django_filters.ModelMultipleChoiceFilter(queryset=Keyword.objects.all(), widget=MultiSelectWidget, method='filter_keywords') @@ -17,6 +18,14 @@ class RecipeFilter(django_filters.FilterSet): queryset = queryset.filter(keywords=x) return queryset + @staticmethod + def filter_name(queryset, name, value): + if not name == 'name': + return queryset + + queryset = Recipe.objects.annotate(similarity=TrigramSimilarity('name', value), ).filter(Q(similarity__gt=1) | Q(name__icontains=value)).order_by('-similarity') + return queryset + class Meta: model = Recipe fields = ['name', 'keywords']