diff --git a/django_select2/static/django_select2/django_select2.js b/django_select2/static/django_select2/django_select2.js index f138ee0..c20b374 100644 --- a/django_select2/static/django_select2/django_select2.js +++ b/django_select2/static/django_select2/django_select2.js @@ -9,12 +9,15 @@ $(function () { term: params.term, page: params.page, field_id: field_id - }; + } }, processResults: function (data, page) { - return { - results: data.results - }; + return { + results: data.results, + pagination: { + more: data.more + } + } } } }); diff --git a/django_select2/views.py b/django_select2/views.py index f410ffd..b57b6db 100644 --- a/django_select2/views.py +++ b/django_select2/views.py @@ -32,7 +32,8 @@ class AutoResponseView(BaseListView): 'text': "foo", 'id': 123 } - ] + ], + 'more': true } """ @@ -48,6 +49,7 @@ class AutoResponseView(BaseListView): } for obj in context['object_list'] ], + 'more': context['page_obj'].has_next() }) def get_queryset(self): diff --git a/tests/test_views.py b/tests/test_views.py index 404b96c..8730b07 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -7,7 +7,9 @@ from django.core import signing from django.core.urlresolvers import reverse from django.utils.encoding import smart_text +from django_select2.forms import ModelSelect2Widget from tests.testapp.forms import AlbumModelSelect2WidgetForm +from tests.testapp.models import Genre class TestAutoResponseView(object): @@ -41,3 +43,26 @@ class TestAutoResponseView(object): url = reverse('django_select2-json') response = client.get(url, {'field_id': field_id, 'term': artist.title}) assert response.status_code == 404 + + def test_pagination(self, genres, client): + url = reverse('django_select2-json') + widget = ModelSelect2Widget( + max_results=10, + model=Genre, + search_fields=['title__icontains'] + ) + widget.render('name', None) + field_id = signing.dumps(id(widget)) + + response = client.get(url, {'field_id': field_id, 'term': ''}) + assert response.status_code == 200 + data = json.loads(response.content.decode('utf-8')) + assert data['more'] is True + + response = client.get(url, {'field_id': field_id, 'term': '', 'page': 1000}) + assert response.status_code == 404 + + response = client.get(url, {'field_id': field_id, 'term': '', 'page': 'last'}) + assert response.status_code == 200 + data = json.loads(response.content.decode('utf-8')) + assert data['more'] is False