From c994458e24ae801831ea83d9780f6a4a942eae4d Mon Sep 17 00:00:00 2001 From: Keith Smith Date: Fri, 9 Jan 2026 08:23:07 -0700 Subject: [PATCH] Fix priority sorting to use correct order MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- tasks/views.py | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/tasks/views.py b/tasks/views.py index 04263b4..673eda9 100644 --- a/tasks/views.py +++ b/tasks/views.py @@ -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':