From 57825bf5b75045c81daf3efdecabf4317ea7eb4c Mon Sep 17 00:00:00 2001 From: Arthur Date: Tue, 27 Sep 2022 15:37:02 -0700 Subject: [PATCH] 8927 use backend search function --- netbox/netbox/views/__init__.py | 19 +------------------ netbox/search/backends.py | 15 +++++++++------ 2 files changed, 10 insertions(+), 24 deletions(-) diff --git a/netbox/netbox/views/__init__.py b/netbox/netbox/views/__init__.py index 5340c89e1..bf2c226ab 100644 --- a/netbox/netbox/views/__init__.py +++ b/netbox/netbox/views/__init__.py @@ -160,24 +160,7 @@ class SearchView(View): url = reverse(search_registry[object_type].url) return redirect(f"{url}?q={form.cleaned_data['q']}") - for obj_type in search_registry.keys(): - - queryset = search_registry[obj_type].queryset.restrict(request.user, 'view') - filterset = search_registry[obj_type].filterset - table = search_registry[obj_type].table - url = search_registry[obj_type].url - - # Construct the results table for this object type - filtered_queryset = filterset({'q': form.cleaned_data['q']}, queryset=queryset).qs - table = table(filtered_queryset, orderable=False) - table.paginate(per_page=SEARCH_MAX_RESULTS) - - if table.page: - results.append({ - 'name': queryset.model._meta.verbose_name_plural, - 'table': table, - 'url': f"{reverse(url)}?q={form.cleaned_data.get('q')}" - }) + results = default_search_engine.search(request, form.cleaned_data['q']) return render(request, 'search.html', { 'form': form, diff --git a/netbox/search/backends.py b/netbox/search/backends.py index cc68fe105..269830c31 100644 --- a/netbox/search/backends.py +++ b/netbox/search/backends.py @@ -5,6 +5,8 @@ from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.db import models from django.db.models.signals import post_save, pre_delete +from django.urls import reverse +from netbox.constants import SEARCH_MAX_RESULTS # The cache for the initialized backend. _backends_cache = {} @@ -114,15 +116,16 @@ class PostgresIcontainsSearchBackend(SearchBackend): def _use_hooks(self): return False - def search(self, search_text): + def search(self, request, search_text): results = [] - for obj_type in SEARCH_TYPES.keys(): + search_registry = self.get_registry() + for obj_type in search_registry.keys(): - queryset = SEARCH_TYPES[obj_type].queryset.restrict(request.user, 'view') - filterset = SEARCH_TYPES[obj_type].filterset - table = SEARCH_TYPES[obj_type].table - url = SEARCH_TYPES[obj_type].url + queryset = search_registry[obj_type].queryset.restrict(request.user, 'view') + filterset = search_registry[obj_type].filterset + table = search_registry[obj_type].table + url = search_registry[obj_type].url # Construct the results table for this object type filtered_queryset = filterset({'q': search_text}, queryset=queryset).qs