Add user-configurable pagination and enhance case view filters
This commit is contained in:
@@ -62,3 +62,22 @@ class AuthorMixin():
|
||||
def remove_author(self, user: User):
|
||||
"""Remove an author from the object"""
|
||||
self.author.remove(user)
|
||||
|
||||
|
||||
class UserConfigurablePaginationMixin:
|
||||
default_per_page = 25
|
||||
allowed_per_page = [25, 50, 100, 250, 500]
|
||||
|
||||
def get_table_pagination(self, table):
|
||||
try:
|
||||
per_page = int(self.request.GET.get("per_page", self.default_per_page))
|
||||
if per_page not in self.allowed_per_page:
|
||||
per_page = self.default_per_page
|
||||
except (TypeError, ValueError):
|
||||
per_page = self.default_per_page
|
||||
return {"per_page": per_page}
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["page_sizes"] = [25, 50, 100, 250, 500]
|
||||
return context
|
||||
@@ -0,0 +1,18 @@
|
||||
<form method="get" class="row align-items-center mb-3">
|
||||
{# Keep existing filters/searches #}
|
||||
{% for key, value in request.GET.items %}
|
||||
{% if key != 'per_page' %}
|
||||
<input type="hidden" name="{{ key }}" value="{{ value }}">
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<div class="col-auto">
|
||||
<label for="per_page" class="form-label mb-0 ">Rows per page:</label>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<select name="per_page" id="per_page" class="form-select form-select-sm" onchange="this.form.submit()">
|
||||
{% for size in page_sizes %}
|
||||
<option value="{{ size }}" {% if request.GET.per_page|stringformat:"s" == size|stringformat:"s" %}selected{% endif %}>{{ size }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
Reference in New Issue
Block a user