mirror of
https://github.com/django/django.git
synced 2025-03-12 18:30:48 +00:00
Fixed #35301 -- Fixed Options._property_names for overriden properties.
Regression in faeb92ea13f0c1b2cc83f45b512f2c41cfb4f02d.
This commit is contained in:
parent
b07e2d57a0
commit
7646b9023d
@ -969,12 +969,14 @@ class Options:
|
|||||||
def _property_names(self):
|
def _property_names(self):
|
||||||
"""Return a set of the names of the properties defined on the model."""
|
"""Return a set of the names of the properties defined on the model."""
|
||||||
names = set()
|
names = set()
|
||||||
|
seen = set()
|
||||||
for klass in self.model.__mro__:
|
for klass in self.model.__mro__:
|
||||||
names |= {
|
names |= {
|
||||||
name
|
name
|
||||||
for name, value in klass.__dict__.items()
|
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)
|
return frozenset(names)
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
|
@ -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):
|
def test_single_primary_key(self):
|
||||||
class Model(models.Model):
|
class Model(models.Model):
|
||||||
foo = models.IntegerField(primary_key=True)
|
foo = models.IntegerField(primary_key=True)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user