summaryrefslogtreecommitdiff
path: root/archaeological_finds/views.py
diff options
context:
space:
mode:
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
commitc573609f76f5d0081cde0727f52a69a62d388e10 (patch)
treeec391d3cae5842a74159eb452cd52b404e1cf19e /archaeological_finds/views.py
parent0f48778cee5d7f47fac9163e6ce032a3f8b3821a (diff)
downloadIshtar-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.py29
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')