Commit b75c7079 authored by Muthiah Annamalai's avatar Muthiah Annamalai Committed by Tim Graham
Browse files

Fixed #24089 -- Added check for when ModelAdmin.fieldsets[1]['fields'] isn't a list/tuple.

parent eeb88123
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -130,6 +130,8 @@ class BaseModelAdminChecks(object):
                    id='admin.E011',
                )
            ]
        elif not isinstance(fieldset[1]['fields'], (list, tuple)):
            return must_be('a list or tuple', option="fieldsets[1]['fields']", obj=cls, id='admin.E008')

        fields = flatten(fieldset[1]['fields'])
        if len(fields) != len(set(fields)):
+49 −0
Original line number Diff line number Diff line
@@ -124,6 +124,55 @@ class SystemChecksTestCase(TestCase):
        errors = ValidFormFieldsets.check(model=Song)
        self.assertEqual(errors, [])

    def test_fieldsets_fields_non_tuple(self):
        """
        Tests for a tuple/list within fieldsets[1]['fields'].
        """
        class NotATupleAdmin(admin.ModelAdmin):
            list_display = ["pk", "title"]
            list_editable = ["title"]
            fieldsets = [
                (None, {
                    "fields": "title"  # not a tuple
                }),
            ]

        errors = NotATupleAdmin.check(model=Song)
        expected = [
            checks.Error(
                "The value of 'fieldsets[1]['fields']' must be a list or tuple.",
                hint=None,
                obj=NotATupleAdmin,
                id='admin.E008',
            )
        ]
        self.assertEqual(errors, expected)

    def test_nonfirst_fieldset(self):
        """
        Tests for a tuple/list within the second fieldsets[2]['fields'].
        """
        class NotATupleAdmin(admin.ModelAdmin):
            fieldsets = [
                (None, {
                    "fields": ("title",)
                }),
                ('foo', {
                    "fields": "author"  # not a tuple
                }),
            ]

        errors = NotATupleAdmin.check(model=Song)
        expected = [
            checks.Error(
                "The value of 'fieldsets[1]['fields']' must be a list or tuple.",
                hint=None,
                obj=NotATupleAdmin,
                id='admin.E008',
            )
        ]
        self.assertEqual(errors, expected)

    def test_exclude_values(self):
        """
        Tests for basic system checks of 'exclude' option values (#12689)