Commit d8f19bb3 authored by Greg Chapple's avatar Greg Chapple Committed by Tim Graham
Browse files

Fixed #22792 -- Updated checks for list_display_links in model admin

parent 34f4fd70
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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'), "
+24 −0
Original line number Diff line number Diff line
@@ -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)