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)