From c573609f76f5d0081cde0727f52a69a62d388e10 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 16 May 2019 16:39:55 +0200 Subject: Autocomplete: filter by more relevant search term --- archaeological_finds/views.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'archaeological_finds/views.py') diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index 72d02305c..9e1a22a2a 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -17,6 +17,7 @@ # See the file COPYING for details. +from collections import OrderedDict import json from django.core.exceptions import PermissionDenied @@ -42,7 +43,7 @@ from archaeological_finds import forms from ishtar_common.views import get_autocomplete_generic, IshtarMixin, \ LoginRequiredMixin, QAItemEditForm, QAItemForm from ishtar_common.views_item import display_item, get_item, show_item, \ - revert_item, get_autocomplete_item, get_autocomplete_query + revert_item, get_autocomplete_item, get_autocomplete_queries from archaeological_operations.wizards import AdministrativeActDeletionWizard from archaeological_finds import wizards @@ -152,17 +153,23 @@ def autocomplete_findbasket(request, current_right=None): if not request.GET.get('term'): return HttpResponse(content_type='text/plain') - query = get_autocomplete_query(request, ['label']) limit = 20 - query = query & models.FindBasket.get_write_query_owns( - request.user.ishtaruser) - items = models.FindBasket.objects.filter(query).distinct().order_by( - 'label')[:limit] - data = json.dumps( - [{'id': item.pk, - 'value': u"{} - {}".format(item.label, item.user)[:60]} - for item in items] - ) + result = OrderedDict() + for query in get_autocomplete_queries(request, ['label']): + query = query & models.FindBasket.get_write_query_owns( + request.user.ishtaruser) + objects = models.FindBasket.objects.filter(query).distinct().order_by( + 'label')[:limit] + for obj in objects: + if obj.id not in list(result.keys()): + result[obj.id] = u"{} - {}".format(obj.label, obj.user)[:60] + limit -= 1 + if not limit: + break + if not limit: + break + data = json.dumps([{'id': obj[0], 'value': obj[1]} + for obj in list(result.items())]) return HttpResponse(data, content_type='text/plain') -- cgit v1.2.3