extend full-text search
This commit is contained in:
parent
004e4bdf98
commit
4ff3af61b3
|
|
@ -33,8 +33,14 @@ class AccountBackOfficeFilter(filters.FilterSet):
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
def search_text(self, queryset, name, value):
|
def search_text(self, queryset, name, value):
|
||||||
|
queryset = queryset.annotate_vector()
|
||||||
if value not in EMPTY_VALUES:
|
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
|
return queryset
|
||||||
|
|
||||||
def by_role_country_code(self, queryset, name, value):
|
def by_role_country_code(self, queryset, name, value):
|
||||||
|
|
|
||||||
|
|
@ -144,9 +144,9 @@ class UserQuerySet(models.QuerySet):
|
||||||
role = Role.objects.filter(role=Role.ESTABLISHMENT_MANAGER).first()
|
role = Role.objects.filter(role=Role.ESTABLISHMENT_MANAGER).first()
|
||||||
return self.by_role(role).filter(userrole__establishment=establishment)
|
return self.by_role(role).filter(userrole__establishment=establishment)
|
||||||
|
|
||||||
def annotate_search_text(self):
|
def annotate_vector(self):
|
||||||
"""Full-text search"""
|
"""Full-text search"""
|
||||||
return self.annotate(search_text=SearchVector(
|
return self.annotate(vector=SearchVector(
|
||||||
'username',
|
'username',
|
||||||
'first_name',
|
'first_name',
|
||||||
'last_name',
|
'last_name',
|
||||||
|
|
@ -154,10 +154,6 @@ class UserQuerySet(models.QuerySet):
|
||||||
'phone',
|
'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):
|
def by_role_country_code(self, country_code: str):
|
||||||
"""Filter by role country code."""
|
"""Filter by role country code."""
|
||||||
return self.filter(userrole__role__country__code=country_code).distinct()
|
return self.filter(userrole__role__country__code=country_code).distinct()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user