From bc68c54d252da759bac71f1529574575734cec3d Mon Sep 17 00:00:00 2001 From: Dan LaManna Date: Tue, 19 Aug 2025 23:05:21 -0400 Subject: [PATCH] Add Task.position field --- .../migrations/0015_add_position_to_task.py | 22 +++++++++++++++++++ stade/core/models/task.py | 3 ++- stade/core/views.py | 2 +- 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 stade/core/migrations/0015_add_position_to_task.py diff --git a/stade/core/migrations/0015_add_position_to_task.py b/stade/core/migrations/0015_add_position_to_task.py new file mode 100644 index 0000000..22f586b --- /dev/null +++ b/stade/core/migrations/0015_add_position_to_task.py @@ -0,0 +1,22 @@ +# Generated by Django 5.2.5 on 2025-08-19 20:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0014_alter_task_metric_field'), + ] + + operations = [ + migrations.AlterModelOptions( + name='task', + options={'ordering': ['position', 'id']}, + ), + migrations.AddField( + model_name='task', + name='position', + field=models.PositiveSmallIntegerField(default=0), + ), + ] diff --git a/stade/core/models/task.py b/stade/core/models/task.py index 51af2c3..0819806 100644 --- a/stade/core/models/task.py +++ b/stade/core/models/task.py @@ -17,7 +17,7 @@ class Task(models.Model): class Meta: - ordering = ['id'] + ordering = ['position', 'id'] class Type(models.TextChoices): SEGMENTATION = 'segmentation', _('Segmentation') @@ -72,6 +72,7 @@ class MetricField(models.TextChoices): help_text='Whether approaches should require a manuscript.', ) test_ground_truth_file = S3FileField() + position = models.PositiveSmallIntegerField(default=0) # Define custom "objects" first, so it will be the "_default_manager", which is more efficient # for many automatically generated queries diff --git a/stade/core/views.py b/stade/core/views.py index ca21cd4..eb46a59 100644 --- a/stade/core/views.py +++ b/stade/core/views.py @@ -41,7 +41,7 @@ def leaderboard_page(request, challenge): if group_by not in ['team', 'approach']: group_by = 'team' if challenge.slug != 'live' else 'approach' - tasks = challenge.tasks.filter(scores_published=True).order_by('name') + tasks = challenge.tasks.filter(scores_published=True).order_by('position') if not request.user.is_staff: tasks = tasks.filter(hidden=False)