diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 648940d2..85602215 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -1266,10 +1266,10 @@ class CachedReferenceField(BaseField): # Get value from document instance if available value = instance._data.get(self.name) - self._auto_dereference = instance._fields[self.name]._auto_dereference + auto_dereference = instance._fields[self.name]._auto_dereference # Dereference DBRefs - if self._auto_dereference and isinstance(value, DBRef): + if auto_dereference and isinstance(value, DBRef): dereferenced = self.document_type._get_db().dereference(value) if dereferenced is None: raise DoesNotExist('Trying to dereference unknown document %s' % value) @@ -1402,8 +1402,8 @@ class GenericReferenceField(BaseField): value = instance._data.get(self.name) - self._auto_dereference = instance._fields[self.name]._auto_dereference - if self._auto_dereference and isinstance(value, (dict, SON)): + auto_dereference = instance._fields[self.name]._auto_dereference + if auto_dereference and isinstance(value, (dict, SON)): dereferenced = self.dereference(value) if dereferenced is None: raise DoesNotExist('Trying to dereference unknown document %s' % value) diff --git a/tests/queryset/queryset.py b/tests/queryset/queryset.py index 35ebe24d..4706305f 100644 --- a/tests/queryset/queryset.py +++ b/tests/queryset/queryset.py @@ -4720,12 +4720,14 @@ class QuerySetTest(unittest.TestCase): class User(Document): organization = ReferenceField(Organization) + organization_gen = GenericReferenceField() User.drop_collection() Organization.drop_collection() org = Organization(name="whatever").save() - User(organization=org).save() + User(organization=org, + organization_gen=org).save() qs = User.objects() user = qs.first() @@ -4733,10 +4735,16 @@ class QuerySetTest(unittest.TestCase): qs_no_deref = User.objects().no_dereference() user_no_deref = qs_no_deref.first() + # ReferenceField no_derf_org = user_no_deref.organization # was triggering the bug self.assertIsInstance(no_derf_org, DBRef) self.assertIsInstance(user.organization, Organization) + # GenericReferenceField + no_derf_org_gen = user_no_deref.organization_gen + self.assertIsInstance(no_derf_org_gen, dict) + self.assertIsInstance(user.organization_gen, Organization) + def test_no_dereference_embedded_doc(self): class User(Document):