summaryrefslogtreecommitdiff
path: root/archaeological_warehouse/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_warehouse/views.py')
-rw-r--r--archaeological_warehouse/views.py34
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([