From ab3083eab30e76bbd88060fc2e1e1f559fd219f4 Mon Sep 17 00:00:00 2001 From: Anastasios Svolis Date: Tue, 26 Nov 2024 07:58:35 +0200 Subject: [PATCH] Fixed a bug that was raising FieldError in dev because of failing trigram similarity search. --- starfields_drf_generics/filters.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/starfields_drf_generics/filters.py b/starfields_drf_generics/filters.py index d6cb880..6405db2 100644 --- a/starfields_drf_generics/filters.py +++ b/starfields_drf_generics/filters.py @@ -1,4 +1,5 @@ - +from django.utils.text import smart_split +from django.core.exceptions import FieldError import operator from functools import reduce from rest_framework.settings import api_settings @@ -414,6 +415,12 @@ class TrigramSearchFilter(BaseFilterBackend): search_title = _('Search') search_description = _('A search string to perform trigram similarity' 'based searching with.') + lookup_prefixes = { + '^': 'istartswith', + '=': 'iexact', + '@': 'search', + '$': 'iregex', + } def get_filters_dict(self, request, view): """ @@ -534,7 +541,8 @@ class TrigramSearchFilter(BaseFilterBackend): 'search_field', query) ).filter(similarity__gt=threshold) - except ImportError: + # NOTE a weird FieldError is raised on sqlite + except (ImportError, FieldError): # Perform very simple sqlite compatible search search_terms = search_smart_split(query)