update views to support toggle sort by class year/alphabetical on conflict page
- SHA
1faf014ad9e0293f3828ff262e07a0a8d70870fb- Parents
-
f34b2eb - Tree
ccd7afd
1faf014
1faf014ad9e0293f3828ff262e07a0a8d70870fbf34b2eb
ccd7afd| Status | File | + | - |
|---|---|---|---|
| M |
memorial/views.py
|
15 | 3 |
memorial/views.pymodified@@ -346,13 +346,25 @@ def memorial_index(request): | ||
| 346 | 346 | """Get all conflicts with their casualties for the memorial index""" |
| 347 | 347 | conflicts = Conflict.objects.all() |
| 348 | 348 | data = [] |
| 349 | - | |
| 349 | + | |
| 350 | + # Get sort parameter from query params (default to alphabetical) | |
| 351 | + sort_by = request.query_params.get('sort', 'alphabetical') | |
| 352 | + | |
| 350 | 353 | for conflict in conflicts: |
| 351 | - casualties = Person.objects.filter(conflict=conflict).order_by('last_name', 'first_name') | |
| 354 | + if sort_by == 'class_year': | |
| 355 | + # Sort by class year (nulls last), then by name | |
| 356 | + casualties = Person.objects.filter(conflict=conflict).extra( | |
| 357 | + select={'class_year_null': 'class_year IS NULL'}, | |
| 358 | + order_by=['class_year_null', 'class_year', 'last_name', 'first_name'] | |
| 359 | + ) | |
| 360 | + else: | |
| 361 | + # Default to alphabetical sorting | |
| 362 | + casualties = Person.objects.filter(conflict=conflict).order_by('last_name', 'first_name') | |
| 363 | + | |
| 352 | 364 | conflict_data = ConflictSerializer(conflict).data |
| 353 | 365 | conflict_data['casualties'] = PersonDetailSerializer(casualties, many=True).data |
| 354 | 366 | data.append(conflict_data) |
| 355 | - | |
| 367 | + | |
| 356 | 368 | return Response(data) |
| 357 | 369 | |
| 358 | 370 | |