Try out postgres fulltext search.
This commit is contained in:
parent
0aadf4305f
commit
c47350f449
@ -23,6 +23,7 @@ from django.db.models import Prefetch
|
||||
from django.db.models.functions import Lower
|
||||
from django.forms import formset_factory
|
||||
import uuid
|
||||
from django.contrib.postgres.search import SearchVector, SearchQuery, SearchRank, TrigramSimilarity
|
||||
|
||||
ParameterSearchFormSet = formset_factory(ComponentParameterSearchForm, extra=0)
|
||||
|
||||
@ -299,12 +300,18 @@ class PackageView(LoginRequiredMixin, BaseTemplateMixin, TemplateView):
|
||||
qs = qs.filter(s_filter)
|
||||
return qs
|
||||
|
||||
def search_packages_adv(self, search):
|
||||
if not search:
|
||||
return Package.objects.all()
|
||||
|
||||
return Package.objects.annotate(similarity=TrigramSimilarity('name', search)).order_by('-similarity')
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
page_num = self.request.GET.get('page', default=1)
|
||||
search_string = self.request.GET.get('search', default=None)
|
||||
|
||||
package_queryset = self.search_packages(search_string)
|
||||
package_queryset = self.search_packages_adv(search_string)
|
||||
|
||||
paginator = Paginator(package_queryset, self.default_page_size)
|
||||
|
||||
|
@ -47,6 +47,7 @@ INSTALLED_APPS = [
|
||||
'crispy_forms',
|
||||
'crispy_bootstrap5',
|
||||
'django.forms',
|
||||
'django.contrib.postgres'
|
||||
]
|
||||
|
||||
FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'
|
||||
|
@ -68,6 +68,7 @@ INSTALLED_APPS = [
|
||||
'crispy_forms',
|
||||
'crispy_bootstrap5',
|
||||
'django.forms',
|
||||
'django.contrib.postgres'
|
||||
]
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user