Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #15964 - Do not order admin actions by description

Thanks to julien for the report and patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16162 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 8eccb728ccd97a07b9281d3a7c2c6bac105f285f 1 parent d11acfd
Luke Plant spookylukey authored
4 django/contrib/admin/options.py
View
@@ -576,9 +576,7 @@ def get_actions(self, request):
# 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
4 tests/regressiontests/admin_views/models.py
View
@@ -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)
14 tests/regressiontests/admin_views/tests.py
View
@@ -1971,6 +1971,20 @@ def test_default_redirect(self):
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/')
Please sign in to comment.
Something went wrong with that request. Please try again.