|
13 | 13 | from django.core.management import call_command |
14 | 14 | from django.core.paginator import Paginator |
15 | 15 | from django.db import transaction |
16 | | -from django.db.models import Q |
17 | 16 | from django_filters.views import FilterView |
18 | 17 | from django.http import HttpResponse |
19 | 18 | from django.http import HttpResponseRedirect, QueryDict, StreamingHttpResponse, HttpResponseBadRequest |
@@ -108,17 +107,19 @@ class TargetNameSearchView(RedirectView): |
108 | 107 | """ |
109 | 108 |
|
110 | 109 | 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() |
113 | 111 | # The Django query planner shows different results between in practice and unit tests |
114 | 112 | # 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): |
121 | 120 | return HttpResponseRedirect(reverse('targets:list') + f'?name={target_name}') |
| 121 | + else: |
| 122 | + return HttpResponseRedirect(reverse('targets:detail', kwargs={'pk': target.id})) |
122 | 123 |
|
123 | 124 |
|
124 | 125 | class TargetCreateView(LoginRequiredMixin, CreateView): |
|
0 commit comments