diff --git a/django_tasks/backends/database/migrations/0015_alter_dbtaskresult_options.py b/django_tasks/backends/database/migrations/0015_alter_dbtaskresult_options.py new file mode 100644 index 0000000..6986bcf --- /dev/null +++ b/django_tasks/backends/database/migrations/0015_alter_dbtaskresult_options.py @@ -0,0 +1,23 @@ +# Generated by Django 5.1.5 on 2025-04-27 12:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("django_tasks_database", "0014_remove_dbtaskresult_exception_data"), + ] + + operations = [ + migrations.AlterModelOptions( + name="dbtaskresult", + options={ + "ordering": [ + models.OrderBy(models.F("priority"), descending=True), + models.OrderBy(models.F("run_after"), nulls_last=True), + ], + "verbose_name": "Task Result", + "verbose_name_plural": "Task Results", + }, + ), + ] diff --git a/django_tasks/backends/database/models.py b/django_tasks/backends/database/models.py index 720157c..cca8701 100644 --- a/django_tasks/backends/database/models.py +++ b/django_tasks/backends/database/models.py @@ -108,7 +108,7 @@ class DBTaskResult(GenericBase[P, T], models.Model): objects = DBTaskResultQuerySet.as_manager() class Meta: - ordering = [F("priority").desc(), F("run_after").desc(nulls_last=True)] + ordering = [F("priority").desc(), F("run_after").asc(nulls_last=True)] verbose_name = _("Task Result") verbose_name_plural = _("Task Results") diff --git a/tests/tests/test_database_backend.py b/tests/tests/test_database_backend.py index 1d40032..2fa841c 100644 --- a/tests/tests/test_database_backend.py +++ b/tests/tests/test_database_backend.py @@ -638,6 +638,14 @@ def test_run_after(self) -> None: self.assertEqual(DBTaskResult.objects.succeeded().count(), 1) def test_run_after_priority(self) -> None: + old_task = test_tasks.noop_task.using( + priority=20, run_after=timezone.now() - timedelta(hours=2) + ).enqueue() + + very_old_task = test_tasks.noop_task.using( + priority=20, run_after=timezone.now() - timedelta(hours=10) + ).enqueue() + far_future_result = test_tasks.noop_task.using( run_after=timezone.now() + timedelta(hours=10) ).enqueue() @@ -658,11 +666,13 @@ def test_run_after_priority(self) -> None: self.assertEqual( [dbt.task_result for dbt in DBTaskResult.objects.all()], [ + very_old_task, + old_task, high_priority_far_future_result, high_priority_result, low_priority_result, - far_future_result, future_result, + far_future_result, lower_priority_result, ], ) @@ -670,6 +680,8 @@ def test_run_after_priority(self) -> None: self.assertEqual( [dbt.task_result for dbt in DBTaskResult.objects.ready()], [ + very_old_task, + old_task, high_priority_result, low_priority_result, lower_priority_result,