Skip to content

Commit 5174973

Browse files
Fix page number issue when changing page size (#782)
Co-authored-by: Amin Alaee <[email protected]>
1 parent 8acef5b commit 5174973

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

sqladmin/pagination.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ def next_page(self) -> PageControl:
4646

4747
raise RuntimeError("Next page not found.")
4848

49+
def resize(self, page_size: int) -> Pagination:
50+
self.page = (self.page - 1) * self.page_size // page_size + 1
51+
self.page_size = page_size
52+
return self
53+
4954
def add_pagination_urls(self, base_url: URL) -> None:
5055
# Previous pages
5156
for p in range(self.page - min(self.max_page_controls, 3), self.page):

sqladmin/templates/sqladmin/list.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ <h3 class="card-title">{{ model_view.name_plural }}</h3>
198198
</a>
199199
<div class="dropdown-menu">
200200
{% for page_size_option in model_view.page_size_options %}
201-
<a class="dropdown-item" href="{{ request.url.include_query_params(pageSize=page_size_option) }}">
201+
<a class="dropdown-item" href="{{ request.url.include_query_params(pageSize=page_size_option, page=pagination.resize(page_size_option).page) }}">
202202
{{ page_size_option }} / Page
203203
</a>
204204
{% endfor %}

tests/test_pagination.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,14 @@ def test_multi_page_unequal_previous_and_next() -> None:
7272
]
7373

7474
assert pagination.page_controls == page_controls
75+
76+
77+
def test_resize_pagination() -> None:
78+
pagination = Pagination(rows=[], page=3, page_size=5, count=20)
79+
assert pagination.resize(100).page == 1
80+
81+
pagination = Pagination(rows=[], page=3, page_size=5, count=20)
82+
assert pagination.resize(1).page == 11
83+
84+
pagination = Pagination(rows=[], page=3, page_size=5, count=20)
85+
assert pagination.resize(8).page == 2

0 commit comments

Comments
 (0)