Fix accessor replacement consistency on Django 1.11

At this point, we don't know why this line of code is executed, but
we do know it's not consistently executed between Django 1.10 and
Django 1.11 due to the addition of `ForwardOneToOneDescriptor`, a
subclass of `ForwardManyToOneDescriptor`.

Refs. 6628145af7
Refs. kavdev/dj-stripe#524
Refs. django/django@38575b007a
This commit is contained in:
Jerome Leclanche
2017-06-04 13:59:30 +03:00
parent bcb8b0d3a4
commit 544f5edef4
+2 -2
View File
@@ -173,9 +173,9 @@ class PolymorphicModel(six.with_metaclass(PolymorphicModelBase, models.Model)):
ReverseSingleRelatedObjectDescriptor as ForwardManyToOneDescriptor,
)
for name, model in subclasses_and_superclasses_accessors.items():
# Here be dragons.
orig_accessor = getattr(self.__class__, name, None)
if type(orig_accessor) in [ReverseOneToOneDescriptor, ForwardManyToOneDescriptor]:
# print >>sys.stderr, '---------- replacing', name, orig_accessor, '->', model
if issubclass(type(orig_accessor), (ReverseOneToOneDescriptor, ForwardManyToOneDescriptor)):
setattr(self.__class__, name, property(create_accessor_function_for_model(model, name)))
def _get_inheritance_relation_fields_and_models(self):