1
0
mirror of https://github.com/django/django.git synced 2024-12-22 17:16:24 +00:00

Fixed #35301 -- Fixed Options._property_names for overriden properties.

Regression in faeb92ea13.
This commit is contained in:
Adam Johnson 2024-03-17 08:43:04 +00:00 committed by GitHub
parent b07e2d57a0
commit 7646b9023d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 1 deletions

View File

@ -969,12 +969,14 @@ class Options:
def _property_names(self):
"""Return a set of the names of the properties defined on the model."""
names = set()
seen = set()
for klass in self.model.__mro__:
names |= {
name
for name, value in klass.__dict__.items()
if isinstance(value, property)
if isinstance(value, property) and name not in seen
}
seen |= set(klass.__dict__)
return frozenset(names)
@cached_property

View File

@ -1343,6 +1343,17 @@ class OtherModelTests(SimpleTestCase):
],
)
def test_inherited_overriden_property_no_clash(self):
class Cheese:
@property
def filling_id(self):
pass
class Sandwich(Cheese, models.Model):
filling = models.ForeignKey("self", models.CASCADE)
self.assertEqual(Sandwich.check(), [])
def test_single_primary_key(self):
class Model(models.Model):
foo = models.IntegerField(primary_key=True)