From 9d22330effa8d433ec39edc37ca4e3a1e3206b85 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Sun, 13 Oct 2013 13:04:31 +0800 Subject: [PATCH] views/base: Implement limit for submitter autocompletion Add a limit parameter to the completion view, and pass a limit of 20 results in the javascript. Signed-off-by: Jeremy Kerr --- apps/patchwork/tests/person.py | 9 +++++++++ apps/patchwork/views/base.py | 23 ++++++++++++++++++----- templates/patchwork/filters.html | 4 +++- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/apps/patchwork/tests/person.py b/apps/patchwork/tests/person.py index 63bbadb..d948096 100644 --- a/apps/patchwork/tests/person.py +++ b/apps/patchwork/tests/person.py @@ -44,3 +44,12 @@ class SubmitterCompletionTest(TestCase): data = json.loads(response.content) self.assertEquals(len(data), 1) self.assertEquals(data[0]['fields']['email'], 'test2@example.com') + + def testCompleteLimit(self): + for i in range(3,10): + person = Person(email = 'test%d@example.com' % i) + person.save() + response = self.client.get('/submitter/', {'q': 'test', 'l': 5}) + self.assertEquals(response.status_code, 200) + data = json.loads(response.content) + self.assertEquals(len(data), 5) diff --git a/apps/patchwork/views/base.py b/apps/patchwork/views/base.py index 634e383..7707653 100644 --- a/apps/patchwork/views/base.py +++ b/apps/patchwork/views/base.py @@ -86,12 +86,25 @@ def confirm(request, key): def submitter_complete(request): search = request.GET.get('q', '') + limit = request.GET.get('l', None) response = HttpResponse(mimetype = "text/plain") - if len(search) > 3: - queryset = Person.objects.filter(Q(name__icontains = search) | - Q(email__icontains = search)) - json_serializer = serializers.get_serializer("json")() - json_serializer.serialize(queryset, ensure_ascii=False, stream=response) + + if len(search) <= 3: + return response + + queryset = Person.objects.filter(Q(name__icontains = search) | + Q(email__icontains = search)) + if limit is not None: + try: + limit = int(limit) + except ValueError: + limit = None + + if limit is not None and limit > 0: + queryset = queryset[:limit] + + json_serializer = serializers.get_serializer("json")() + json_serializer.serialize(queryset, ensure_ascii=False, stream=response) return response help_pages = {'': 'index.html', diff --git a/templates/patchwork/filters.html b/templates/patchwork/filters.html index 3698101..c0b8f5a 100644 --- a/templates/patchwork/filters.html +++ b/templates/patchwork/filters.html @@ -122,6 +122,7 @@ function submitter_complete_response() function submitter_field_change(field) { + var limit = 20; var value = field.value; if (value.length < 4) { return; @@ -131,7 +132,8 @@ function submitter_field_change(field) return; } - var url = '{% url patchwork.views.submitter_complete %}?q=' + value; + var url = '{% url patchwork.views.submitter_complete %}?q=' + value + + '&l=' + limit; req = new XMLHttpRequest(); req.onreadystatechange = submitter_complete_response; req.open("GET", url, true); -- 2.39.5