From d8f19bb3b6f858bef499fdab41948a5a5e8d55aa Mon Sep 17 00:00:00 2001 From: Greg Chapple Date: Tue, 10 Jun 2014 10:32:46 +0100 Subject: [PATCH] Fixed #22792 -- Updated checks for list_display_links in model admin --- django/contrib/admin/checks.py | 7 +++++-- tests/modeladmin/tests.py | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/django/contrib/admin/checks.py b/django/contrib/admin/checks.py index e49bb8fb6e..335062562d 100644 --- a/django/contrib/admin/checks.py +++ b/django/contrib/admin/checks.py @@ -779,7 +779,7 @@ class ModelAdminChecks(BaseModelAdminChecks): obj=cls, id='admin.E122', ), - elif field_name in cls.list_display_links: + elif cls.list_display_links and field_name in cls.list_display_links: return [ checks.Error( "The value of '%s' cannot be in both 'list_editable' and 'list_display_links'." % field_name, @@ -788,7 +788,10 @@ class ModelAdminChecks(BaseModelAdminChecks): id='admin.E123', ) ] - elif not cls.list_display_links and cls.list_display[0] in cls.list_editable: + # Check that list_display_links is set, and that the first values of list_editable and list_display are + # not the same. See ticket #22792 for the use case relating to this. + elif (cls.list_display[0] in cls.list_editable and cls.list_display[0] != cls.list_editable[0] and + cls.list_display_links is not None): return [ checks.Error( "The value of '%s' refers to the first field in 'list_display' ('%s'), " diff --git a/tests/modeladmin/tests.py b/tests/modeladmin/tests.py index 1c3a21d374..3f5f378818 100644 --- a/tests/modeladmin/tests.py +++ b/tests/modeladmin/tests.py @@ -1518,3 +1518,27 @@ class CustomModelAdminTests(CheckTestCase): validator_class = CustomValidator self.assertIsInvalid(CustomModelAdmin, ValidationTestModel, 'error!') + + +class ListDisplayEditableTests(CheckTestCase): + def test_list_display_links_is_none(self): + """ + list_display and list_editable can contain the same values + when list_display_links is None + """ + class ProductAdmin(ModelAdmin): + list_display = ['name', 'slug', 'pub_date'] + list_editable = list_display + list_display_links = None + self.assertIsValid(ProductAdmin, ValidationTestModel) + + def test_list_display_same_as_list_editable(self): + """ + The first item in list_display can be the same as the first + in list_editable + """ + class ProductAdmin(ModelAdmin): + list_display = ['name', 'slug', 'pub_date'] + list_editable = ['name', 'slug'] + list_display_links = ['pub_date'] + self.assertIsValid(ProductAdmin, ValidationTestModel)