Enhance destinataer list: 50 entries per page + default sort by last name

🎯 Improvements Made:
- Increased pagination from 20 to 50 entries per page
- Added default sorting by last name (nachname) in ascending order
- Added visual sorting indicators with Font Awesome icons (up/down arrows)
- Added results info showing current page range and total count
- Display shows sorting method when active

📊 User Experience:
- List now shows 50 destinataers by default (as requested)
- Always sorted by last name for consistent browsing
- Clear visual feedback for which column is sorted
- Informative pagination showing 'X-Y of Z entries (50 per page)'

 Template & View Changes:
- Modified destinataer_list view in views.py
- Enhanced destinataer_list.html template
- Maintained all existing filtering and search functionality
This commit is contained in:
2025-09-29 20:34:30 +02:00
parent 0d672477af
commit a1ecd31b76
2 changed files with 40 additions and 5 deletions

View File

@@ -1190,11 +1190,18 @@ def destinataer_list(request):
else:
order_fields = fields
destinataere = destinataere.order_by(*order_fields)
else:
# Default sorting by last name (nachname) ascending
destinataere = destinataere.order_by("nachname", "vorname")
paginator = Paginator(destinataere, 20)
paginator = Paginator(destinataere, 50) # Increased from 20 to 50 entries per page
page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
# Set default sort to nachname if no sort is specified
effective_sort = sort if sort else "nachname"
effective_direction = direction if sort else "asc"
context = {
"page_obj": page_obj,
"search_query": search_query,
@@ -1203,8 +1210,8 @@ def destinataer_list(request):
"aktiv_filter": aktiv_filter,
"familienzweig_choices": Destinataer.FAMILIENZWIG_CHOICES,
"berufsgruppe_choices": Destinataer.BERUFSGRUPPE_CHOICES,
"sort": sort,
"dir": direction,
"sort": effective_sort,
"dir": effective_direction,
}
return render(request, "stiftung/destinataer_list.html", context)

View File

@@ -88,10 +88,28 @@
<thead class="table-light">
<tr>
<th>
<a href="?sort=vorname&dir={% if sort == 'vorname' and dir != 'desc' %}desc{% else %}asc{% endif %}{% if search_query %}&search={{ search_query }}{% endif %}{% if familienzweig_filter %}&familienzweig={{ familienzweig_filter }}{% endif %}{% if berufsgruppe_filter %}&berufsgruppe={{ berufsgruppe_filter }}{% endif %}{% if aktiv_filter %}&aktiv={{ aktiv_filter }}{% endif %}">Vorname</a>
<a href="?sort=vorname&dir={% if sort == 'vorname' and dir != 'desc' %}desc{% else %}asc{% endif %}{% if search_query %}&search={{ search_query }}{% endif %}{% if familienzweig_filter %}&familienzweig={{ familienzweig_filter }}{% endif %}{% if berufsgruppe_filter %}&berufsgruppe={{ berufsgruppe_filter }}{% endif %}{% if aktiv_filter %}&aktiv={{ aktiv_filter }}{% endif %}">
Vorname
{% if sort == 'vorname' %}
{% if dir == 'desc' %}
<i class="fas fa-sort-down"></i>
{% else %}
<i class="fas fa-sort-up"></i>
{% endif %}
{% endif %}
</a>
</th>
<th>
<a href="?sort=nachname&dir={% if sort == 'nachname' and dir != 'desc' %}desc{% else %}asc{% endif %}{% if search_query %}&search={{ search_query }}{% endif %}{% if familienzweig_filter %}&familienzweig={{ familienzweig_filter }}{% endif %}{% if berufsgruppe_filter %}&berufsgruppe={{ berufsgruppe_filter }}{% endif %}{% if aktiv_filter %}&aktiv={{ aktiv_filter }}{% endif %}">Nachname</a>
<a href="?sort=nachname&dir={% if sort == 'nachname' and dir != 'desc' %}desc{% else %}asc{% endif %}{% if search_query %}&search={{ search_query }}{% endif %}{% if familienzweig_filter %}&familienzweig={{ familienzweig_filter }}{% endif %}{% if berufsgruppe_filter %}&berufsgruppe={{ berufsgruppe_filter }}{% endif %}{% if aktiv_filter %}&aktiv={{ aktiv_filter }}{% endif %}">
Nachname
{% if sort == 'nachname' %}
{% if dir == 'desc' %}
<i class="fas fa-sort-down"></i>
{% else %}
<i class="fas fa-sort-up"></i>
{% endif %}
{% endif %}
</a>
</th>
<th>
<a href="?sort=email&dir={% if sort == 'email' and dir != 'desc' %}desc{% else %}asc{% endif %}{% if search_query %}&search={{ search_query }}{% endif %}{% if familienzweig_filter %}&familienzweig={{ familienzweig_filter }}{% endif %}{% if berufsgruppe_filter %}&berufsgruppe={{ berufsgruppe_filter }}{% endif %}{% if aktiv_filter %}&aktiv={{ aktiv_filter }}{% endif %}">E-Mail</a>
@@ -170,6 +188,16 @@
</table>
</div>
<!-- Results info -->
<div class="mt-3 mb-3 text-muted text-center">
<small>
Zeige {{ page_obj.start_index }} - {{ page_obj.end_index }} von {{ page_obj.paginator.count }} Destinatären
(50 Einträge pro Seite{% if sort %}, sortiert nach
{% if sort == 'nachname' %}Nachname{% elif sort == 'vorname' %}Vorname{% elif sort == 'email' %}E-Mail{% elif sort == 'vierteljaehrlicher_betrag' %}Vierteljährlicher Betrag{% elif sort == 'aktiv' %}Status{% elif sort == 'unterstuetzung_bestaetigt' %}Unterstützung bestätigt{% endif %}
{% if dir == 'desc' %} (absteigend){% else %} (aufsteigend){% endif %}{% endif %})
</small>
</div>
<!-- Pagination -->
{% if page_obj.has_other_pages %}
<nav aria-label="Destinatäre Pagination" class="mt-4">