Quellcode durchsuchen

Fixed #32494 -- Adjusted system check for raw_id_fields to warn about Field.attname.

Hasan Ramezani vor 4 Jahren
Ursprung
Commit
20ddc3b81d
2 geänderte Dateien mit 20 neuen und 0 gelöschten Zeilen
  1. 8 0
      django/contrib/admin/checks.py
  2. 12 0
      tests/modeladmin/test_checks.py

+ 8 - 0
django/contrib/admin/checks.py

@@ -239,6 +239,14 @@ class BaseModelAdminChecks:
         except FieldDoesNotExist:
             return refer_to_missing_field(field=field_name, option=label, obj=obj, id='admin.E002')
         else:
+            # Using attname is not supported.
+            if field.name != field_name:
+                return refer_to_missing_field(
+                    field=field_name,
+                    option=label,
+                    obj=obj,
+                    id='admin.E002',
+                )
             if not field.many_to_many and not isinstance(field, models.ForeignKey):
                 return must_be('a foreign key or a many-to-many field', option=label, obj=obj, id='admin.E003')
             else:

+ 12 - 0
tests/modeladmin/test_checks.py

@@ -84,6 +84,18 @@ class RawIdCheckTests(CheckTestCase):
 
         self.assertIsValid(TestModelAdmin, ValidationTestModel)
 
+    def test_field_attname(self):
+        class TestModelAdmin(ModelAdmin):
+            raw_id_fields = ['band_id']
+
+        self.assertIsInvalid(
+            TestModelAdmin,
+            ValidationTestModel,
+            "The value of 'raw_id_fields[0]' refers to 'band_id', which is "
+            "not a field of 'modeladmin.ValidationTestModel'.",
+            'admin.E002',
+        )
+
 
 class FieldsetsCheckTests(CheckTestCase):