fixed fuzzy filter mixing not working without login
This commit is contained in:
@ -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())
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user