Skip to content

Commit 8af9699

Browse files
authored
Merge pull request #1388 from griffin-h/feature/faster_search
speed up search by name
2 parents fac0500 + f31a3f0 commit 8af9699

1 file changed

Lines changed: 10 additions & 9 deletions

File tree

tom_targets/views.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
from django.core.management import call_command
1414
from django.core.paginator import Paginator
1515
from django.db import transaction
16-
from django.db.models import Q
1716
from django_filters.views import FilterView
1817
from django.http import HttpResponse
1918
from django.http import HttpResponseRedirect, QueryDict, StreamingHttpResponse, HttpResponseBadRequest
@@ -108,17 +107,19 @@ class TargetNameSearchView(RedirectView):
108107
"""
109108

110109
def get(self, request, *args, **kwargs):
111-
target_name = self.kwargs['name']
112-
# Tests fail without distinct but it works in practice, it is unclear as to why
110+
target_name = self.kwargs['name'].strip()
113111
# The Django query planner shows different results between in practice and unit tests
114112
# django-guardian related querying is present in the test planner, but not in practice
115-
targets = targets_for_user(request.user, Target.objects.all(), 'view_target').filter(
116-
Q(name__icontains=target_name) | Q(aliases__name__icontains=target_name)
117-
).distinct()
118-
if targets.count() == 1:
119-
return HttpResponseRedirect(reverse('targets:detail', kwargs={'pk': targets.first().id}))
120-
else:
113+
all_targets = targets_for_user(request.user, Target.objects.all(), 'view_target')
114+
targets_main = all_targets.filter(name__icontains=target_name)
115+
targets_alias = all_targets.filter(aliases__name__icontains=target_name)
116+
targets = targets_main.union(targets_alias)
117+
try:
118+
target = targets.get()
119+
except (Target.DoesNotExist, Target.MultipleObjectsReturned):
121120
return HttpResponseRedirect(reverse('targets:list') + f'?name={target_name}')
121+
else:
122+
return HttpResponseRedirect(reverse('targets:detail', kwargs={'pk': target.id}))
122123

123124

124125
class TargetCreateView(LoginRequiredMixin, CreateView):

0 commit comments

Comments
 (0)