vmi-virtual-memorial/vmi-wd-backend / bb1783f

Browse files

order by graduation year

Authored by espadonne
SHA
bb1783f62d55f25b24771d2298153ad3955779ad
Parents
6197637
Tree
de19754

1 changed file

StatusFile+-
M memorial/views.py 16 3
memorial/views.pymodified
@@ -41,8 +41,16 @@ class PersonViewSet(viewsets.ReadOnlyModelViewSet):
4141
         conflict_id = self.request.query_params.get('conflict', None)
4242
         if conflict_id is not None:
4343
             queryset = queryset.filter(conflict_id=conflict_id)
44
-        # Always order by last name, then first name for consistency
45
-        return queryset.order_by('last_name', 'first_name')
44
+        
45
+        # Allow ordering by different fields via query param
46
+        order_by = self.request.query_params.get('order_by', 'name')
47
+        
48
+        if order_by == 'class_year':
49
+            # Order by class year (nulls last), then name
50
+            return queryset.order_by('class_year', 'last_name', 'first_name')
51
+        else:
52
+            # Default ordering by name
53
+            return queryset.order_by('last_name', 'first_name')
4654
     
4755
     @action(detail=False, methods=['get'])
4856
     def search(self, request):
@@ -175,7 +183,12 @@ def memorial_index(request):
175183
     data = []
176184
     
177185
     for conflict in conflicts:
178
-        casualties = Person.objects.filter(conflict=conflict).order_by('last_name', 'first_name')
186
+        # Order by class year first (nulls last), then by name
187
+        # Use raw SQL ordering to put nulls last
188
+        casualties = Person.objects.filter(conflict=conflict).extra(
189
+            select={'class_year_null': 'class_year IS NULL'},
190
+            order_by=['class_year_null', 'class_year', 'last_name', 'first_name']
191
+        )
179192
         conflict_data = ConflictSerializer(conflict).data
180193
         conflict_data['casualties'] = PersonListSerializer(casualties, many=True).data
181194
         data.append(conflict_data)