Update pagination behaviour on wagtail.contrib.forms to match Django standard

pull/10533/head
Matt Westcott 2023-06-10 00:15:13 +01:00
rodzic 2b9ba182c2
commit e6add87cd0
2 zmienionych plików z 13 dodań i 75 usunięć

Wyświetl plik

@ -174,11 +174,7 @@ class TestFormsIndex(WagtailTestUtils, TestCase):
response = self.client.get(reverse("wagtailforms:index"), {"p": "Hello world!"})
# Check response
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "wagtailforms/index.html")
# Check that it got page one
self.assertEqual(response.context["page_obj"].number, 1)
self.assertEqual(response.status_code, 404)
def test_forms_index_pagination_out_of_range(self):
# Create some more form pages to make pagination kick in
@ -188,13 +184,7 @@ class TestFormsIndex(WagtailTestUtils, TestCase):
response = self.client.get(reverse("wagtailforms:index"), {"p": 99999})
# Check response
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "wagtailforms/index.html")
# Check that it got the last page
self.assertEqual(
response.context["page_obj"].number, response.context["paginator"].num_pages
)
self.assertEqual(response.status_code, 404)
def test_cannot_see_forms_without_permission(self):
# Login with as a user without permission to see forms
@ -310,7 +300,7 @@ class TestFormsIndexWithLocalisationEnabled(WagtailTestUtils, TestCase):
self.assertEqual(response.context["page_obj"].number, 2)
response = self.client.get(self.forms_index_url, {"p": 3})
self.assertEqual(response.context["page_obj"].number, 2)
self.assertEqual(response.status_code, 404)
# now check the French pages.
response = self.client.get(
@ -478,11 +468,7 @@ class TestFormsSubmissionsList(WagtailTestUtils, TestCase):
)
# Check response
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "wagtailforms/submissions_index.html")
# Check that we got page one
self.assertEqual(response.context["page_obj"].number, 1)
self.assertEqual(response.status_code, 404)
def test_list_submissions_pagination_out_of_range(self):
self.make_list_submissions()
@ -493,13 +479,7 @@ class TestFormsSubmissionsList(WagtailTestUtils, TestCase):
)
# Check response
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "wagtailforms/submissions_index.html")
# Check that we got the last page
self.assertEqual(
response.context["page_obj"].number, response.context["paginator"].num_pages
)
self.assertEqual(response.status_code, 404)
def test_list_submissions_default_order(self):
response = self.client.get(
@ -1187,11 +1167,7 @@ class TestCustomFormsSubmissionsList(WagtailTestUtils, TestCase):
)
# Check response
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "wagtailforms/submissions_index.html")
# Check that we got page one
self.assertEqual(response.context["page_obj"].number, 1)
self.assertEqual(response.status_code, 404)
def test_list_submissions_pagination_out_of_range(self):
self.make_list_submissions()
@ -1202,13 +1178,7 @@ class TestCustomFormsSubmissionsList(WagtailTestUtils, TestCase):
)
# Check response
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "wagtailforms/submissions_index.html")
# Check that we got the last page
self.assertEqual(
response.context["page_obj"].number, response.context["paginator"].num_pages
)
self.assertEqual(response.status_code, 404)
class TestDeleteFormSubmission(WagtailTestUtils, TestCase):

Wyświetl plik

@ -3,7 +3,6 @@ from collections import OrderedDict
from django.conf import settings
from django.core.exceptions import PermissionDenied
from django.core.paginator import InvalidPage
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from django.utils.translation import gettext_lazy, ngettext
@ -23,46 +22,13 @@ def get_submissions_list_view(request, *args, **kwargs):
return form_page.serve_submissions_list_view(request, *args, **kwargs)
class SafePaginateListView(ListView):
"""Listing view with safe pagination, allowing incorrect or out of range values"""
paginate_by = 20
page_kwarg = "p"
def paginate_queryset(self, queryset, page_size):
"""Paginate the queryset if needed with nice defaults on invalid param."""
paginator = self.get_paginator(
queryset,
page_size,
orphans=self.get_paginate_orphans(),
allow_empty_first_page=self.get_allow_empty(),
)
page_kwarg = self.page_kwarg
page_request = (
self.kwargs.get(page_kwarg) or self.request.GET.get(page_kwarg) or 0
)
try:
page_number = int(page_request)
except ValueError:
if page_request == "last":
page_number = paginator.num_pages
else:
page_number = 0
try:
if page_number > paginator.num_pages:
page_number = paginator.num_pages # page out of range, show last page
page = paginator.page(page_number)
except InvalidPage:
page = paginator.page(1)
finally:
return paginator, page, page.object_list, page.has_other_pages()
class FormPagesListView(SafePaginateListView):
class FormPagesListView(ListView):
"""Lists the available form pages for the current user"""
template_name = "wagtailforms/index.html"
context_object_name = "form_pages"
paginate_by = 20
page_kwarg = "p"
def __init__(self, **kwargs):
super().__init__(**kwargs)
@ -174,7 +140,7 @@ class DeleteSubmissionsView(TemplateView):
return context
class SubmissionsListView(SpreadsheetExportMixin, SafePaginateListView):
class SubmissionsListView(SpreadsheetExportMixin, ListView):
"""Lists submissions for the provided form page"""
template_name = "wagtailforms/submissions_index.html"
@ -188,6 +154,8 @@ class SubmissionsListView(SpreadsheetExportMixin, SafePaginateListView):
) # used to validate ordering in URL
page_title = gettext_lazy("Form data")
select_date_form = None
paginate_by = 20
page_kwarg = "p"
def dispatch(self, request, *args, **kwargs):
"""Check permissions and set the form page"""