summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/admin/options.py4
-rw-r--r--tests/regressiontests/admin_views/models.py4
-rw-r--r--tests/regressiontests/admin_views/tests.py14
3 files changed, 18 insertions, 4 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 787f8567e3..c603210e8b 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -576,9 +576,7 @@ class ModelAdmin(BaseModelAdmin):
# get_action might have returned None, so filter any of those out.
actions = filter(None, actions)
- # Convert the actions into a SortedDict keyed by name
- # and sorted by description.
- actions.sort(key=lambda k: k[2].lower())
+ # Convert the actions into a SortedDict keyed by name.
actions = SortedDict([
(name, (func, name, desc))
for func, name, desc in actions
diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py
index 6e34ee1272..854fb60e70 100644
--- a/tests/regressiontests/admin_views/models.py
+++ b/tests/regressiontests/admin_views/models.py
@@ -341,13 +341,15 @@ def external_mail(modeladmin, request, selected):
'from@example.com',
['to@example.com']
).send()
+external_mail.short_description = 'External mail (Another awesome action)'
def redirect_to(modeladmin, request, selected):
from django.http import HttpResponseRedirect
return HttpResponseRedirect('/some-where-else/')
+redirect_to.short_description = 'Redirect to (Awesome action)'
class ExternalSubscriberAdmin(admin.ModelAdmin):
- actions = [external_mail, redirect_to]
+ actions = [redirect_to, external_mail]
class Media(models.Model):
name = models.CharField(max_length=60)
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index 0537160cc0..25740bccea 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -1971,6 +1971,20 @@ class AdminActionsTest(TestCase):
response = self.client.post(url, action_data)
self.assertRedirects(response, url)
+ def test_actions_ordering(self):
+ """
+ Ensure that actions are ordered as expected.
+ Refs #15964.
+ """
+ response = self.client.get('/test_admin/admin/admin_views/externalsubscriber/')
+ self.assertTrue('''<label>Action: <select name="action">
+<option value="" selected="selected">---------</option>
+<option value="delete_selected">Delete selected external subscribers</option>
+<option value="redirect_to">Redirect to (Awesome action)</option>
+<option value="external_mail">External mail (Another awesome action)</option>
+</select>'''in response.content,
+ )
+
def test_model_without_action(self):
"Tests a ModelAdmin without any action"
response = self.client.get('/test_admin/admin/admin_views/oldsubscriber/')