From 1ffa0f396a12b74b377f2bcdde5c953627bf0b66 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Thu, 1 Jun 2023 21:44:44 +0200 Subject: [PATCH] fixed fuzzy filter mixing not working without login --- cookbook/views/api.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/cookbook/views/api.py b/cookbook/views/api.py index e49c30a9..9cc90abe 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -172,15 +172,17 @@ class FuzzyFilterMixin(ViewSetMixin, ExtendedRecipeMixin): def get_queryset(self): self.queryset = self.queryset.filter(space=self.request.space).order_by(Lower('name').asc()) query = self.request.query_params.get('query', None) - fuzzy = self.request.user.searchpreference.lookup or any([self.model.__name__.lower() in x for x in - self.request.user.searchpreference.trigram.values_list( - 'field', flat=True)]) + if self.request.user.is_authenticated: + fuzzy = self.request.user.searchpreference.lookup or any([self.model.__name__.lower() in x for x in + self.request.user.searchpreference.trigram.values_list( + 'field', flat=True)]) + else: + fuzzy = True if query is not None and query not in ["''", '']: if fuzzy and (settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql']): - if any([self.model.__name__.lower() in x for x in - self.request.user.searchpreference.unaccent.values_list('field', flat=True)]): + if self.request.user.is_authenticated and any([self.model.__name__.lower() in x for x in self.request.user.searchpreference.unaccent.values_list('field', flat=True)]): self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name__unaccent', query)) else: self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name', query)) @@ -188,14 +190,13 @@ class FuzzyFilterMixin(ViewSetMixin, ExtendedRecipeMixin): else: # TODO have this check unaccent search settings or other search preferences? filter = Q(name__icontains=query) - if any([self.model.__name__.lower() in x for x in - self.request.user.searchpreference.unaccent.values_list('field', flat=True)]): - filter |= Q(name__unaccent__icontains=query) + if self.request.user.is_authenticated: + if any([self.model.__name__.lower() in x for x in self.request.user.searchpreference.unaccent.values_list('field', flat=True)]): + filter |= Q(name__unaccent__icontains=query) self.queryset = ( - self.queryset - .annotate(starts=Case(When(name__istartswith=query, then=(Value(100))), - default=Value(0))) # put exact matches at the top of the result set + self.queryset.annotate(starts=Case(When(name__istartswith=query, then=(Value(100))), + default=Value(0))) # put exact matches at the top of the result set .filter(filter).order_by('-starts', Lower('name').asc()) )