1
0
mirror of https://github.com/django/django.git synced 2025-02-22 07:24:59 +00:00

Fixed #34513 -- Added system check for relational fields in ModelAdmin.list_display.

This commit is contained in:
Bakdolot 2023-05-02 10:46:22 +06:00 committed by GitHub
parent 0e444e84f8
commit c61219a7ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 3 deletions

View File

@ -916,9 +916,10 @@ class ModelAdminChecks(BaseModelAdminChecks):
id="admin.E108", id="admin.E108",
) )
] ]
if isinstance(field, models.ManyToManyField) or ( if (
getattr(field, "rel", None) and field.rel.field.many_to_one getattr(field, "is_relation", False)
): and (field.many_to_many or field.one_to_many)
) or (getattr(field, "rel", None) and field.rel.field.many_to_one):
return [ return [
checks.Error( checks.Error(
f"The value of '{label}' must not be a many-to-many field or a " f"The value of '{label}' must not be a many-to-many field or a "

View File

@ -554,6 +554,30 @@ class ListDisplayTests(CheckTestCase):
"admin.E109", "admin.E109",
) )
def test_invalid_related_field(self):
class TestModelAdmin(ModelAdmin):
list_display = ["song"]
self.assertIsInvalid(
TestModelAdmin,
Band,
"The value of 'list_display[0]' must not be a many-to-many field or a "
"reverse foreign key.",
"admin.E109",
)
def test_invalid_m2m_related_name(self):
class TestModelAdmin(ModelAdmin):
list_display = ["featured"]
self.assertIsInvalid(
TestModelAdmin,
Band,
"The value of 'list_display[0]' must not be a many-to-many field or a "
"reverse foreign key.",
"admin.E109",
)
def test_valid_case(self): def test_valid_case(self):
@admin.display @admin.display
def a_callable(obj): def a_callable(obj):