mirror of https://github.com/django/django.git
Fixed #25910 -- Rejected read-only property names in model constructors.
This commit is contained in:
parent
4dc74371e3
commit
16baec5c8a
|
@ -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):
|
||||||
# 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()
|
||||||
|
|
Loading…
Reference in New Issue