mirror of
https://github.com/django/django.git
synced 2025-03-12 18:30:48 +00:00
Fixed #36092 -- Disallowed non-local fields in composite primary keys.
This commit is contained in:
parent
bf7b17d16d
commit
d83fb782d3
@ -1803,6 +1803,8 @@ class Model(AltersData, metaclass=ModelBase):
|
|||||||
hint = f"{field_name!r} field may not set 'null=True'."
|
hint = f"{field_name!r} field may not set 'null=True'."
|
||||||
elif field.generated:
|
elif field.generated:
|
||||||
hint = f"{field_name!r} field is a generated field."
|
hint = f"{field_name!r} field is a generated field."
|
||||||
|
elif field not in meta.local_fields:
|
||||||
|
hint = f"{field_name!r} field is not a local field."
|
||||||
else:
|
else:
|
||||||
seen_columns[field.column].append(field_name)
|
seen_columns[field.column].append(field_name)
|
||||||
|
|
||||||
|
@ -247,3 +247,24 @@ class CompositePKChecksTests(TestCase):
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_composite_pk_cannot_include_non_local_field(self):
|
||||||
|
class Foo(models.Model):
|
||||||
|
a = models.SmallIntegerField()
|
||||||
|
|
||||||
|
class Bar(Foo):
|
||||||
|
pk = models.CompositePrimaryKey("a", "b")
|
||||||
|
b = models.SmallIntegerField()
|
||||||
|
|
||||||
|
self.assertEqual(Foo.check(databases=self.databases), [])
|
||||||
|
self.assertEqual(
|
||||||
|
Bar.check(databases=self.databases),
|
||||||
|
[
|
||||||
|
checks.Error(
|
||||||
|
"'a' cannot be included in the composite primary key.",
|
||||||
|
hint="'a' field is not a local field.",
|
||||||
|
obj=Bar,
|
||||||
|
id="models.E042",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user