mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-20 09:46:06 +02:00
fixed sorting for last_active
This commit is contained in:
parent
d933da326c
commit
993ae06b6a
1 changed files with 20 additions and 2 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
from datetime import datetime
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.core.paginator import Paginator
|
from django.core.paginator import Paginator
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
|
@ -115,8 +116,25 @@ def apply_sorting(data_list, request):
|
||||||
if sort_by == "member":
|
if sort_by == "member":
|
||||||
sort_by = "email"
|
sort_by = "email"
|
||||||
|
|
||||||
# Sort the list
|
# Custom key function that handles None, 'Invited', and datetime values for last_active
|
||||||
data_list = sorted(data_list, key=itemgetter(sort_by), reverse=(order == "desc"))
|
def sort_key(item):
|
||||||
|
value = item.get(sort_by)
|
||||||
|
if sort_by == "last_active":
|
||||||
|
# Return a tuple to ensure consistent data types for comparison
|
||||||
|
# First element: ordering value (0 for valid datetime, 1 for 'Invited', 2 for None)
|
||||||
|
# Second element: the actual value to sort by
|
||||||
|
if value is None:
|
||||||
|
return (2, value) # Position None last
|
||||||
|
if value == 'Invited':
|
||||||
|
return (1, value) # Position 'Invited' before None but after valid datetimes
|
||||||
|
if isinstance(value, datetime):
|
||||||
|
return (0, value) # Position valid datetime values first
|
||||||
|
|
||||||
|
# Default case: return the value as is for comparison
|
||||||
|
return value
|
||||||
|
|
||||||
|
# Sort the list using the custom key function
|
||||||
|
data_list = sorted(data_list, key=sort_key, reverse=(order == "desc"))
|
||||||
|
|
||||||
return data_list
|
return data_list
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue