diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2013-10-13 13:04:31 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2013-10-13 13:04:31 +0800 |
commit | 9d22330effa8d433ec39edc37ca4e3a1e3206b85 (patch) | |
tree | 3a9017cb0b48ecb5bbc7212f8c88cf6053fbaa0f | |
parent | df1abefaaa678cedc4ce0293fd84bb4164c9852d (diff) | |
download | patchwork-9d22330effa8d433ec39edc37ca4e3a1e3206b85.tar patchwork-9d22330effa8d433ec39edc37ca4e3a1e3206b85.tar.gz |
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 <jk@ozlabs.org>
-rw-r--r-- | apps/patchwork/tests/person.py | 9 | ||||
-rw-r--r-- | apps/patchwork/views/base.py | 23 | ||||
-rw-r--r-- | 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); |