Unified admin action description generation.
Actions added to AdminSite.actions would not have the first character of their description capitalized. Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
This commit is contained in:
parent
f63f3cdf09
commit
fed8129276
|
@ -857,6 +857,10 @@ class ModelAdmin(BaseModelAdmin):
|
||||||
return helpers.checkbox.render(helpers.ACTION_CHECKBOX_NAME, str(obj.pk))
|
return helpers.checkbox.render(helpers.ACTION_CHECKBOX_NAME, str(obj.pk))
|
||||||
action_checkbox.short_description = mark_safe('<input type="checkbox" id="action-toggle">')
|
action_checkbox.short_description = mark_safe('<input type="checkbox" id="action-toggle">')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _get_action_description(func, name):
|
||||||
|
return getattr(func, 'short_description', capfirst(name.replace('_', ' ')))
|
||||||
|
|
||||||
def _get_base_actions(self):
|
def _get_base_actions(self):
|
||||||
"""Return the list of actions, prior to any request-based filtering."""
|
"""Return the list of actions, prior to any request-based filtering."""
|
||||||
actions = []
|
actions = []
|
||||||
|
@ -869,7 +873,7 @@ class ModelAdmin(BaseModelAdmin):
|
||||||
for (name, func) in self.admin_site.actions:
|
for (name, func) in self.admin_site.actions:
|
||||||
if name in base_action_names:
|
if name in base_action_names:
|
||||||
continue
|
continue
|
||||||
description = getattr(func, 'short_description', name.replace('_', ' '))
|
description = self._get_action_description(func, name)
|
||||||
actions.append((func, name, description))
|
actions.append((func, name, description))
|
||||||
# Add actions from this ModelAdmin.
|
# Add actions from this ModelAdmin.
|
||||||
actions.extend(base_actions)
|
actions.extend(base_actions)
|
||||||
|
@ -938,10 +942,7 @@ class ModelAdmin(BaseModelAdmin):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if hasattr(func, 'short_description'):
|
description = self._get_action_description(func, action)
|
||||||
description = func.short_description
|
|
||||||
else:
|
|
||||||
description = capfirst(action.replace('_', ' '))
|
|
||||||
return func, action, description
|
return func, action, description
|
||||||
|
|
||||||
def get_list_display(self, request):
|
def get_list_display(self, request):
|
||||||
|
|
|
@ -77,6 +77,31 @@ class AdminActionsTests(TestCase):
|
||||||
action_names = [name for _, name, _ in ma2._get_base_actions()]
|
action_names = [name for _, name, _ in ma2._get_base_actions()]
|
||||||
self.assertEqual(action_names, ['delete_selected'])
|
self.assertEqual(action_names, ['delete_selected'])
|
||||||
|
|
||||||
|
def test_global_actions_description(self):
|
||||||
|
def global_action_1(modeladmin, request, queryset):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def global_action_2(modeladmin, request, queryset):
|
||||||
|
pass
|
||||||
|
|
||||||
|
global_action_1.short_description = 'Site-wide admin action 1.'
|
||||||
|
admin_site = admin.AdminSite()
|
||||||
|
admin_site.add_action(global_action_1)
|
||||||
|
admin_site.add_action(global_action_2)
|
||||||
|
|
||||||
|
class BandAdmin(admin.ModelAdmin):
|
||||||
|
pass
|
||||||
|
|
||||||
|
ma = BandAdmin(Band, admin_site)
|
||||||
|
self.assertEqual(
|
||||||
|
[description for _, _, description in ma._get_base_actions()],
|
||||||
|
[
|
||||||
|
'Delete selected %(verbose_name_plural)s',
|
||||||
|
'Site-wide admin action 1.',
|
||||||
|
'Global action 2',
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
def test_actions_replace_global_action(self):
|
def test_actions_replace_global_action(self):
|
||||||
def global_action_1(modeladmin, request, queryset):
|
def global_action_1(modeladmin, request, queryset):
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Reference in New Issue