diff options
| author | Adam Johnson <me@adamj.eu> | 2017-06-04 22:58:24 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2017-06-05 09:15:55 -0400 |
| commit | b7d6077517c6cb2daa5e5faf2ae9f94698c06ca9 (patch) | |
| tree | 0cbaa66892979188ebf170540ec6c6b1f902a65b /tests | |
| parent | fa8346b9a9d9e16c4b6e928648538fccf9c82a2e (diff) | |
[1.11.x] Fixed #28269 -- Fixed Model.__init__() crash on models with a field that has an instance only descriptor.
Regression in d2a26c1a90e837777dabdf3d67ceec4d2a70fb86.
Backport of ed244199c72f5bbf33ab4547e06e69873d7271d0 from master
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/model_meta/models.py | 9 | ||||
| -rw-r--r-- | tests/model_meta/tests.py | 2 |
2 files changed, 11 insertions, 0 deletions
diff --git a/tests/model_meta/models.py b/tests/model_meta/models.py index 882ac2c9fd..bd7e7f1889 100644 --- a/tests/model_meta/models.py +++ b/tests/model_meta/models.py @@ -9,6 +9,13 @@ class Relation(models.Model): pass +class InstanceOnlyDescriptor(object): + def __get__(self, instance, cls=None): + if instance is None: + raise AttributeError('Instance only') + return 1 + + class AbstractPerson(models.Model): # DATA fields data_abstract = models.CharField(max_length=10) @@ -43,6 +50,8 @@ class AbstractPerson(models.Model): def test_property(self): return 1 + test_instance_only_descriptor = InstanceOnlyDescriptor() + class BasePerson(AbstractPerson): # DATA fields diff --git a/tests/model_meta/tests.py b/tests/model_meta/tests.py index 265e180331..1b71c95b3e 100644 --- a/tests/model_meta/tests.py +++ b/tests/model_meta/tests.py @@ -276,4 +276,6 @@ class ParentListTests(SimpleTestCase): class PropertyNamesTests(SimpleTestCase): def test_person(self): + # Instance only descriptors don't appear in _property_names. + self.assertEqual(AbstractPerson().test_instance_only_descriptor, 1) self.assertEqual(AbstractPerson._meta._property_names, frozenset(['pk', 'test_property'])) |
