fixed fuzzy filter mixing not working without login

This commit is contained in:
vabene1111
2023-06-01 21:44:44 +02:00
parent a53f17c1b9
commit 1ffa0f396a

View File

@ -172,15 +172,17 @@ class FuzzyFilterMixin(ViewSetMixin, ExtendedRecipeMixin):
def get_queryset(self): def get_queryset(self):
self.queryset = self.queryset.filter(space=self.request.space).order_by(Lower('name').asc()) self.queryset = self.queryset.filter(space=self.request.space).order_by(Lower('name').asc())
query = self.request.query_params.get('query', None) 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 if self.request.user.is_authenticated:
self.request.user.searchpreference.trigram.values_list( fuzzy = self.request.user.searchpreference.lookup or any([self.model.__name__.lower() in x for x in
'field', flat=True)]) self.request.user.searchpreference.trigram.values_list(
'field', flat=True)])
else:
fuzzy = True
if query is not None and query not in ["''", '']: if query is not None and query not in ["''", '']:
if fuzzy and (settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', if fuzzy and (settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2',
'django.db.backends.postgresql']): 'django.db.backends.postgresql']):
if any([self.model.__name__.lower() in x for x in 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.request.user.searchpreference.unaccent.values_list('field', flat=True)]):
self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name__unaccent', query)) self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name__unaccent', query))
else: else:
self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name', query)) self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name', query))
@ -188,14 +190,13 @@ class FuzzyFilterMixin(ViewSetMixin, ExtendedRecipeMixin):
else: else:
# TODO have this check unaccent search settings or other search preferences? # TODO have this check unaccent search settings or other search preferences?
filter = Q(name__icontains=query) filter = Q(name__icontains=query)
if any([self.model.__name__.lower() in x for x in if self.request.user.is_authenticated:
self.request.user.searchpreference.unaccent.values_list('field', flat=True)]): 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) filter |= Q(name__unaccent__icontains=query)
self.queryset = ( self.queryset = (
self.queryset self.queryset.annotate(starts=Case(When(name__istartswith=query, then=(Value(100))),
.annotate(starts=Case(When(name__istartswith=query, then=(Value(100))), default=Value(0))) # put exact matches at the top of the result set
default=Value(0))) # put exact matches at the top of the result set
.filter(filter).order_by('-starts', Lower('name').asc()) .filter(filter).order_by('-starts', Lower('name').asc())
) )