Internal
Public Access
Fix priority sorting to use correct order
Previously priority sorting was alphabetical (high < low < medium < urgent) instead of by importance. Now uses Django Case/When to map priority strings to numeric values: urgent=4, high=3, medium=2, low=1. Fixes both queryset sorting and list sorting for overdue filter. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.5
parent
5985fd010e
commit
c994458e24
+25
-8
@@ -271,20 +271,37 @@ class DashboardView(View):
|
|||||||
|
|
||||||
# Apply sorting before converting to list
|
# Apply sorting before converting to list
|
||||||
if not isinstance(tasks, list):
|
if not isinstance(tasks, list):
|
||||||
|
# Define priority order for sorting
|
||||||
|
from django.db.models import Case, When, IntegerField, F
|
||||||
|
priority_order_case = Case(
|
||||||
|
When(priority='urgent', then=4),
|
||||||
|
When(priority='high', then=3),
|
||||||
|
When(priority='medium', then=2),
|
||||||
|
When(priority='low', then=1),
|
||||||
|
default=0,
|
||||||
|
output_field=IntegerField(),
|
||||||
|
)
|
||||||
|
|
||||||
if current_sort == 'due_date':
|
if current_sort == 'due_date':
|
||||||
# Sort by due date (nulls last), then priority
|
# Sort by due date (nulls last), then priority
|
||||||
from django.db.models import F
|
tasks = tasks.annotate(priority_order=priority_order_case).order_by(
|
||||||
tasks = tasks.order_by(F('due_date').asc(nulls_last=True), '-priority')
|
F('due_date').asc(nulls_last=True), '-priority_order'
|
||||||
|
)
|
||||||
elif current_sort == 'due_date_desc':
|
elif current_sort == 'due_date_desc':
|
||||||
# Sort by due date descending (nulls last), then priority
|
# Sort by due date descending (nulls last), then priority
|
||||||
from django.db.models import F
|
tasks = tasks.annotate(priority_order=priority_order_case).order_by(
|
||||||
tasks = tasks.order_by(F('due_date').desc(nulls_last=True), '-priority')
|
F('due_date').desc(nulls_last=True), '-priority_order'
|
||||||
|
)
|
||||||
elif current_sort == 'priority':
|
elif current_sort == 'priority':
|
||||||
# Sort by priority, then due date
|
# Sort by priority (high to low), then due date
|
||||||
tasks = tasks.order_by('-priority', 'due_date')
|
tasks = tasks.annotate(priority_order=priority_order_case).order_by(
|
||||||
|
'-priority_order', 'due_date'
|
||||||
|
)
|
||||||
elif current_sort == 'priority_low':
|
elif current_sort == 'priority_low':
|
||||||
# Sort by priority (low to high), then due date
|
# Sort by priority (low to high), then due date
|
||||||
tasks = tasks.order_by('priority', 'due_date')
|
tasks = tasks.annotate(priority_order=priority_order_case).order_by(
|
||||||
|
'priority_order', 'due_date'
|
||||||
|
)
|
||||||
# else: default ordering from model (sort_order, -priority, due_date, created_at)
|
# else: default ordering from model (sort_order, -priority, due_date, created_at)
|
||||||
|
|
||||||
# Convert to list if not already (for overdue filter)
|
# Convert to list if not already (for overdue filter)
|
||||||
@@ -293,7 +310,7 @@ class DashboardView(View):
|
|||||||
|
|
||||||
# Apply sorting to lists (for overdue filter case)
|
# Apply sorting to lists (for overdue filter case)
|
||||||
else:
|
else:
|
||||||
priority_order = {'high': 3, 'medium': 2, 'low': 1}
|
priority_order = {'urgent': 4, 'high': 3, 'medium': 2, 'low': 1}
|
||||||
if current_sort == 'due_date':
|
if current_sort == 'due_date':
|
||||||
tasks = sorted(tasks, key=lambda t: (t.due_date or timezone.now().date() + timezone.timedelta(days=9999), -priority_order.get(t.priority, 0)))
|
tasks = sorted(tasks, key=lambda t: (t.due_date or timezone.now().date() + timezone.timedelta(days=9999), -priority_order.get(t.priority, 0)))
|
||||||
elif current_sort == 'due_date_desc':
|
elif current_sort == 'due_date_desc':
|
||||||
|
|||||||
Reference in New Issue
Block a user