From 600c576ac56fc5c0567450c8cb5696f225de7c8d Mon Sep 17 00:00:00 2001 From: Julien Phalip Date: Wed, 26 Oct 2011 09:37:07 +0000 Subject: [PATCH] Fixed #17090 -- Made the API specification for `ModelAdmin.get_list_display()` more consistent with that of `ModelAdmin.list_display` by separating out the admin action check boxes business. This is backwards-incompatible for those who have been using the still-unreleased `get_list_display()` method. Thanks to Ramiro Morales for the review. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17035 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/options.py | 31 +++++++++---------- .../regressiontests/admin_changelist/tests.py | 4 +-- .../admin_registration/tests.py | 2 +- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 6be2a64b7c..ab62d96f26 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -342,13 +342,6 @@ class ModelAdmin(BaseModelAdmin): self.model = model self.opts = model._meta self.admin_site = admin_site - if 'action_checkbox' not in self.list_display and self.actions is not None: - self.list_display = ['action_checkbox'] + list(self.list_display) - if not self.list_display_links: - for name in self.list_display: - if name != 'action_checkbox': - self.list_display_links = [name] - break super(ModelAdmin, self).__init__() def get_inline_instances(self, request): @@ -1104,19 +1097,23 @@ class ModelAdmin(BaseModelAdmin): # Check actions to see if any are available on this changelist actions = self.get_actions(request) - # Remove action checkboxes if there aren't any actions available. - list_display = list(self.get_list_display(request)) - if not actions: - try: - list_display.remove('action_checkbox') - except ValueError: - pass + list_display = self.get_list_display(request) + + list_display_links = self.list_display_links + if not self.list_display_links and list_display: + list_display_links = list(list_display)[:1] + + if actions: + # Add the action checkboxes if there are any actions available. + list_display = ['action_checkbox'] + list(list_display) ChangeList = self.get_changelist(request) try: - cl = ChangeList(request, self.model, list_display, self.list_display_links, - self.list_filter, self.date_hierarchy, self.search_fields, - self.list_select_related, self.list_per_page, self.list_max_show_all, self.list_editable, self) + cl = ChangeList(request, self.model, list_display, + list_display_links, self.list_filter, self.date_hierarchy, + self.search_fields, self.list_select_related, + self.list_per_page, self.list_max_show_all, self.list_editable, + self) except IncorrectLookupParameters: # Wacky lookup parameters were given, so redirect to the main # changelist page, without parameters, and pass an 'invalid=1' diff --git a/tests/regressiontests/admin_changelist/tests.py b/tests/regressiontests/admin_changelist/tests.py index 5f2ebff43f..a081c980df 100644 --- a/tests/regressiontests/admin_changelist/tests.py +++ b/tests/regressiontests/admin_changelist/tests.py @@ -48,7 +48,7 @@ class ChangeListTests(TestCase): template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}') context = Context({'cl': cl}) table_output = template.render(context) - row_html = 'name(None)' % (new_child.id, new_child.id) + row_html = 'name(None)' % new_child.id self.assertFalse(table_output.find(row_html) == -1, 'Failed to find expected row element: %s' % table_output) @@ -68,7 +68,7 @@ class ChangeListTests(TestCase): template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}') context = Context({'cl': cl}) table_output = template.render(context) - row_html = 'nameParent object' % (new_child.id, new_child.id) + row_html = 'nameParent object' % new_child.id self.assertFalse(table_output.find(row_html) == -1, 'Failed to find expected row element: %s' % table_output) diff --git a/tests/regressiontests/admin_registration/tests.py b/tests/regressiontests/admin_registration/tests.py index 1ba8bb1f76..1b2d291691 100644 --- a/tests/regressiontests/admin_registration/tests.py +++ b/tests/regressiontests/admin_registration/tests.py @@ -42,7 +42,7 @@ class TestRegistration(TestCase): search_fields=["name"], list_display=['__str__']) self.assertEqual(self.site._registry[Person].search_fields, ['name']) self.assertEqual(self.site._registry[Person].list_display, - ['action_checkbox', '__str__']) + ['__str__']) self.assertTrue(self.site._registry[Person].save_on_top) def test_iterable_registration(self):