Skip to content

Commit fd0d3fd

Browse files
authored
Merge pull request #669 from jbernal0019/master
Sort plugins by version
2 parents 19bc09f + ee6a7a6 commit fd0d3fd

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated by Django 5.2.1 on 2025-10-16 23:22
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('plugins', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name='plugin',
15+
options={'ordering': ('meta', '-version')},
16+
),
17+
]

chris_backend/plugins/models.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ class Plugin(models.Model):
182182

183183
class Meta:
184184
unique_together = [['meta', 'version'], ['meta', 'dock_image']]
185-
ordering = ('meta', '-creation_date',)
185+
ordering = ('meta', '-version',)
186186

187187
def __str__(self):
188188
return self.meta.name
@@ -201,7 +201,7 @@ def get_registered_compute_resources(self):
201201

202202
class PluginFilter(FilterSet):
203203
"""
204-
Filter class for the Plugin model.
204+
Filter class for the Plugin model with custom sorting.
205205
"""
206206
min_creation_date = django_filters.IsoDateTimeFilter(field_name="creation_date",
207207
lookup_expr='gte')
@@ -220,6 +220,7 @@ class PluginFilter(FilterSet):
220220
name_title_category = django_filters.CharFilter(method='search_name_title_category')
221221
compute_resource_id = django_filters.CharFilter(field_name='compute_resources__id',
222222
lookup_expr='exact')
223+
sort = django_filters.CharFilter(method='apply_sort')
223224

224225
def search_name_title_category(self, queryset, name, value):
225226
"""
@@ -232,11 +233,20 @@ def search_name_title_category(self, queryset, name, value):
232233
lookup = lookup | models.Q(meta__category__icontains=value)
233234
return queryset.filter(lookup)
234235

236+
def apply_sort(self, queryset, name, value):
237+
"""
238+
Custom method to sort by user-specified field, keeping 'meta' as primary ordering.
239+
"""
240+
allowed_fields = ('version', '-version', 'creation_date', '-creation_date')
241+
if value in allowed_fields:
242+
return queryset.order_by('meta', value)
243+
return queryset
244+
235245
class Meta:
236246
model = Plugin
237247
fields = ['id', 'name', 'name_exact', 'version', 'dock_image', 'type', 'category',
238248
'min_creation_date', 'max_creation_date', 'title', 'public_repo',
239-
'description', 'name_title_category', 'compute_resource_id']
249+
'description', 'name_title_category', 'compute_resource_id', 'sort']
240250

241251

242252
class PluginParameter(models.Model):

0 commit comments

Comments
 (0)