22
22
from readthedocs .oauth .models import RemoteRepository
23
23
from readthedocs .projects import constants
24
24
from readthedocs .projects .exceptions import ProjectSpamError
25
+ from readthedocs .projects .templatetags .projects_tags import sort_version_aware
25
26
from readthedocs .projects .models import (
26
27
Domain ,
27
28
EmailHook ,
@@ -235,9 +236,7 @@ def __init__(self, *args, **kwargs):
235
236
choices = [default_choice ] + list (all_versions ),
236
237
)
237
238
238
- active_versions = self .instance .all_active_versions ().values_list (
239
- 'slug' , 'verbose_name'
240
- ) # yapf: disabled
239
+ active_versions = self .get_all_active_versions ()
241
240
self .fields ['default_version' ].widget = forms .Select (
242
241
choices = active_versions ,
243
242
)
@@ -253,6 +252,21 @@ def clean_conf_py_file(self):
253
252
) # yapf: disable
254
253
return filename
255
254
255
+ def get_all_active_versions (self ):
256
+ """
257
+ Returns all active versions.
258
+
259
+ Returns a smartly sorted list of tuples.
260
+ First item of each tuple is the version's slug,
261
+ and the second item is version's verbose_name.
262
+ """
263
+ version_qs = self .instance .all_active_versions ()
264
+ if version_qs .exists ():
265
+ version_qs = sort_version_aware (version_qs )
266
+ all_versions = [(version .slug , version .verbose_name ) for version in version_qs ]
267
+ return all_versions
268
+ return [()]
269
+
256
270
257
271
class UpdateProjectForm (
258
272
ProjectTriggerBuildMixin ,
@@ -429,12 +443,14 @@ def build_versions_form(project):
429
443
versions_qs = project .versions .all () # Admin page, so show all versions
430
444
active = versions_qs .filter (active = True )
431
445
if active .exists ():
446
+ active = sort_version_aware (active )
432
447
choices = [(version .slug , version .verbose_name ) for version in active ]
433
448
attrs ['default-version' ] = forms .ChoiceField (
434
449
label = _ ('Default Version' ),
435
450
choices = choices ,
436
451
initial = project .get_default_version (),
437
452
)
453
+ versions_qs = sort_version_aware (versions_qs )
438
454
for version in versions_qs :
439
455
field_name = 'version-{}' .format (version .slug )
440
456
privacy_name = 'privacy-{}' .format (version .slug )
0 commit comments