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
|
||||
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':
|
||||
# Sort by due date (nulls last), then priority
|
||||
from django.db.models import F
|
||||
tasks = tasks.order_by(F('due_date').asc(nulls_last=True), '-priority')
|
||||
tasks = tasks.annotate(priority_order=priority_order_case).order_by(
|
||||
F('due_date').asc(nulls_last=True), '-priority_order'
|
||||
)
|
||||
elif current_sort == 'due_date_desc':
|
||||
# Sort by due date descending (nulls last), then priority
|
||||
from django.db.models import F
|
||||
tasks = tasks.order_by(F('due_date').desc(nulls_last=True), '-priority')
|
||||
tasks = tasks.annotate(priority_order=priority_order_case).order_by(
|
||||
F('due_date').desc(nulls_last=True), '-priority_order'
|
||||
)
|
||||
elif current_sort == 'priority':
|
||||
# Sort by priority, then due date
|
||||
tasks = tasks.order_by('-priority', 'due_date')
|
||||
# Sort by priority (high to low), then due date
|
||||
tasks = tasks.annotate(priority_order=priority_order_case).order_by(
|
||||
'-priority_order', 'due_date'
|
||||
)
|
||||
elif current_sort == 'priority_low':
|
||||
# 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)
|
||||
|
||||
# Convert to list if not already (for overdue filter)
|
||||
@@ -293,7 +310,7 @@ class DashboardView(View):
|
||||
|
||||
# Apply sorting to lists (for overdue filter case)
|
||||
else:
|
||||
priority_order = {'high': 3, 'medium': 2, 'low': 1}
|
||||
priority_order = {'urgent': 4, 'high': 3, 'medium': 2, 'low': 1}
|
||||
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)))
|
||||
elif current_sort == 'due_date_desc':
|
||||
|
||||
Reference in New Issue
Block a user