From d8165ce1566771960cf33e414c1a6e643fd46dea Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Sun, 12 Dec 2010 22:58:47 +0000 Subject: [PATCH] Fixed #14312 -- Raising an ``IncorrectLookupParameters`` if the page number given to an admin change list exceeds the number of the last page. Thanks, mk. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14889 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/views/main.py | 2 +- .../regressiontests/admin_changelist/tests.py | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 0ebb7fd2bb..606388c817 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -117,7 +117,7 @@ class ChangeList(object): try: result_list = paginator.page(self.page_num+1).object_list except InvalidPage: - result_list = () + raise IncorrectLookupParameters self.result_count = result_count self.full_result_count = full_result_count diff --git a/tests/regressiontests/admin_changelist/tests.py b/tests/regressiontests/admin_changelist/tests.py index cb16f4b892..96b36f8355 100644 --- a/tests/regressiontests/admin_changelist/tests.py +++ b/tests/regressiontests/admin_changelist/tests.py @@ -1,4 +1,5 @@ from django.contrib import admin +from django.contrib.admin.options import IncorrectLookupParameters from django.contrib.admin.views.main import ChangeList from django.template import Context, Template from django.test import TransactionTestCase @@ -71,6 +72,28 @@ class ChangeListTests(TransactionTestCase): self.assertFalse('%s' % editable_name_field == -1, 'Failed to find "name" list_editable field in: %s' % table_output) + def test_result_list_editable(self): + """ + Regression test for #14312: list_editable with pagination + """ + + new_parent = Parent.objects.create(name='parent') + for i in range(200): + new_child = Child.objects.create(name='name %s' % i, parent=new_parent) + request = MockRequest() + request.GET['p'] = -1 # Anything outside range + m = ChildAdmin(Child, admin.site) + + # Test with list_editable fields + m.list_display = ['id', 'name', 'parent'] + m.list_display_links = ['id'] + m.list_editable = ['name'] + self.assertRaises(IncorrectLookupParameters, lambda: \ + ChangeList(request, Child, m.list_display, m.list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, m.list_editable, m)) + + class ChildAdmin(admin.ModelAdmin): list_display = ['name', 'parent'] def queryset(self, request):