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.
|
# get_action might have returned None, so filter any of those out.
|
||||||
actions = filter(None, actions)
|
actions = filter(None, actions)
|
||||||
|
|
||||||
# Convert the actions into a SortedDict keyed by name
|
# Convert the actions into a SortedDict keyed by name.
|
||||||
# and sorted by description.
|
|
||||||
actions.sort(key=lambda k: k[2].lower())
|
|
||||||
actions = SortedDict([
|
actions = SortedDict([
|
||||||
(name, (func, name, desc))
|
(name, (func, name, desc))
|
||||||
for func, name, desc in actions
|
for func, name, desc in actions
|
||||||
|
|
|
@ -341,13 +341,15 @@ def external_mail(modeladmin, request, selected):
|
||||||
'from@example.com',
|
'from@example.com',
|
||||||
['to@example.com']
|
['to@example.com']
|
||||||
).send()
|
).send()
|
||||||
|
external_mail.short_description = 'External mail (Another awesome action)'
|
||||||
|
|
||||||
def redirect_to(modeladmin, request, selected):
|
def redirect_to(modeladmin, request, selected):
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
return HttpResponseRedirect('/some-where-else/')
|
return HttpResponseRedirect('/some-where-else/')
|
||||||
|
redirect_to.short_description = 'Redirect to (Awesome action)'
|
||||||
|
|
||||||
class ExternalSubscriberAdmin(admin.ModelAdmin):
|
class ExternalSubscriberAdmin(admin.ModelAdmin):
|
||||||
actions = [external_mail, redirect_to]
|
actions = [redirect_to, external_mail]
|
||||||
|
|
||||||
class Media(models.Model):
|
class Media(models.Model):
|
||||||
name = models.CharField(max_length=60)
|
name = models.CharField(max_length=60)
|
||||||
|
|
|
@ -1971,6 +1971,20 @@ class AdminActionsTest(TestCase):
|
||||||
response = self.client.post(url, action_data)
|
response = self.client.post(url, action_data)
|
||||||
self.assertRedirects(response, url)
|
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):
|
def test_model_without_action(self):
|
||||||
"Tests a ModelAdmin without any action"
|
"Tests a ModelAdmin without any action"
|
||||||
response = self.client.get('/test_admin/admin/admin_views/oldsubscriber/')
|
response = self.client.get('/test_admin/admin/admin_views/oldsubscriber/')
|
||||||
|
|
Loading…
Reference in New Issue