fix ReverseOneToOneDescriptor on wrapped models

This commit is contained in:
Laura Klünder 2017-12-24 15:59:06 +01:00
parent 92a8b5c209
commit e8dbc0843c

View file

@ -8,6 +8,7 @@ from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.db import models from django.db import models
from django.db.models import FieldDoesNotExist, Manager, ManyToManyRel, Prefetch, Q from django.db.models import FieldDoesNotExist, Manager, ManyToManyRel, Prefetch, Q
from django.db.models.fields.related_descriptors import ReverseOneToOneDescriptor
from django.utils.functional import cached_property from django.utils.functional import cached_property
from c3nav.mapdata.utils.models import get_submodels from c3nav.mapdata.utils.models import get_submodels
@ -201,6 +202,12 @@ class ModelInstanceWrapper(BaseWrapper):
return False return False
return self.pk == other.pk return self.pk == other.pk
def __getattr__(self, name):
descriptor = getattr(self._obj.__class__, name, None)
if isinstance(descriptor, ReverseOneToOneDescriptor):
return descriptor.__get__(self, self.__class__)
return super().__getattr__(name)
def __setattr__(self, name, value): def __setattr__(self, name, value):
""" """
We have to intercept here because RelatedFields won't accept We have to intercept here because RelatedFields won't accept