extend full-text search

This commit is contained in:
Anatoly 2020-01-22 09:41:15 +03:00
parent 004e4bdf98
commit 4ff3af61b3
2 changed files with 9 additions and 7 deletions

View File

@ -33,8 +33,14 @@ class AccountBackOfficeFilter(filters.FilterSet):
return queryset
def search_text(self, queryset, name, value):
queryset = queryset.annotate_vector()
if value not in EMPTY_VALUES:
return queryset.search_text(value)
# search by exact value
filtered_qs = queryset.filter(vector=value)
if not filtered_qs.exists():
# if filtered qs is None find something
filtered_qs = queryset.filter(vector__icontains=value)
return filtered_qs
return queryset
def by_role_country_code(self, queryset, name, value):

View File

@ -144,9 +144,9 @@ class UserQuerySet(models.QuerySet):
role = Role.objects.filter(role=Role.ESTABLISHMENT_MANAGER).first()
return self.by_role(role).filter(userrole__establishment=establishment)
def annotate_search_text(self):
def annotate_vector(self):
"""Full-text search"""
return self.annotate(search_text=SearchVector(
return self.annotate(vector=SearchVector(
'username',
'first_name',
'last_name',
@ -154,10 +154,6 @@ class UserQuerySet(models.QuerySet):
'phone',
))
def search_text(self, value: str):
"""Filter by annotated search vector."""
return self.annotate_search_text().filter(search_text=value)
def by_role_country_code(self, country_code: str):
"""Filter by role country code."""
return self.filter(userrole__role__country__code=country_code).distinct()