diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-10-24 22:29:23 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-10-24 22:29:23 +0200 |
commit | 2a193ae2b1b0008232a01eae2935eab46c430917 (patch) | |
tree | 171ca305ae3bd4b9a5fc4ae246174ca21eaef495 | |
parent | e4bdbca5ce128a14edc087522eac5931774c58a6 (diff) | |
download | Ishtar-2a193ae2b1b0008232a01eae2935eab46c430917.tar.bz2 Ishtar-2a193ae2b1b0008232a01eae2935eab46c430917.zip |
Container autocomplete: display exact reference first
-rw-r--r-- | archaeological_warehouse/views.py | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py index a1b1ffbe2..a867192ab 100644 --- a/archaeological_warehouse/views.py +++ b/archaeological_warehouse/views.py @@ -68,19 +68,31 @@ def autocomplete_container(request): return HttpResponse(content_type='text/plain') if not request.GET.get('term'): return HttpResponse(content_type='text/plain') - q = request.GET.get('term') + term = request.GET.get('term') + limit = 15 query = Q() - for q in q.split(' '): - extra = Q(container_type__label__icontains=q) | \ - Q(container_type__reference__icontains=q) | \ - Q(reference__icontains=q) | \ - Q(location__name=q) | \ - Q(location__town=q) + for q in term.split(' '): + extra = Q(reference__iexact=q) query = query & extra - limit = 15 - containers = models.Container.objects.filter(query)[:limit] - data = json.dumps([{'id': container.pk, 'value': unicode(container)} - for container in containers]) + containers = list(models.Container.objects.filter( + query).values('id', 'cached_label')[:limit]) + limit = 15 - len(containers) + if limit > 0: + query = Q() + for q in term.split(' '): + extra = Q(container_type__label__icontains=q) | \ + Q(container_type__reference__icontains=q) | \ + Q(reference__icontains=q) | \ + Q(location__name=q) | \ + Q(location__town=q) + query = query & extra + containers += list( + models.Container.objects.filter(query).exclude( + pk__in=[c['id'] for c in containers] + ).values('id', 'cached_label')[:limit]) + data = json.dumps( + [{'id': container['id'], 'value': container['cached_label']} + for container in containers]) return HttpResponse(data, content_type='text/plain') warehouse_packaging_wizard = PackagingWizard.as_view([ |