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
This commit is contained in:
parent
d11acfd209
commit
8eccb728cc
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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/')
|
||||
|
|
Loading…
Reference in New Issue