Kaydet (Commit) 16baec5c authored tarafından Joshua Phillips's avatar Joshua Phillips Kaydeden (comit) Tim Graham

Fixed #25910 -- Rejected read-only property names in model constructors.

üst 4dc74371
...@@ -435,7 +435,8 @@ class Model(six.with_metaclass(ModelBase)): ...@@ -435,7 +435,8 @@ class Model(six.with_metaclass(ModelBase)):
for prop in list(kwargs): for prop in list(kwargs):
try: try:
if isinstance(getattr(self.__class__, prop), property): if isinstance(getattr(self.__class__, prop), property):
setattr(self, prop, kwargs.pop(prop)) setattr(self, prop, kwargs[prop])
del kwargs[prop]
except AttributeError: except AttributeError:
pass pass
if kwargs: if kwargs:
......
...@@ -18,6 +18,10 @@ class PropertyTests(TestCase): ...@@ -18,6 +18,10 @@ class PropertyTests(TestCase):
# The "full_name" property hasn't provided a "set" method. # The "full_name" property hasn't provided a "set" method.
self.assertRaises(AttributeError, setattr, self.a, 'full_name', 'Paul McCartney') self.assertRaises(AttributeError, setattr, self.a, 'full_name', 'Paul McCartney')
# And cannot be used to initialize the class.
with self.assertRaisesMessage(TypeError, "'full_name' is an invalid keyword argument"):
Person(full_name='Paul McCartney')
# But "full_name_2" has, and it can be used to initialize the class. # But "full_name_2" has, and it can be used to initialize the class.
a2 = Person(full_name_2='Paul McCartney') a2 = Person(full_name_2='Paul McCartney')
a2.save() a2.save()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment