diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-05-16 16:39:55 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-05-16 16:39:55 +0200 |
commit | c573609f76f5d0081cde0727f52a69a62d388e10 (patch) | |
tree | ec391d3cae5842a74159eb452cd52b404e1cf19e /archaeological_finds/views.py | |
parent | 0f48778cee5d7f47fac9163e6ce032a3f8b3821a (diff) | |
download | Ishtar-c573609f76f5d0081cde0727f52a69a62d388e10.tar.bz2 Ishtar-c573609f76f5d0081cde0727f52a69a62d388e10.zip |
Autocomplete: filter by more relevant search term
Diffstat (limited to 'archaeological_finds/views.py')
-rw-r--r-- | archaeological_finds/views.py | 29 |
1 files changed, 18 insertions, 11 deletions
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') |