Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions mongoengine/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -1266,10 +1266,10 @@ def __get__(self, instance, owner):

# 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)
Expand Down Expand Up @@ -1402,8 +1402,8 @@ def __get__(self, instance, owner):

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)
Expand Down
10 changes: 9 additions & 1 deletion tests/queryset/queryset.py
Original file line number Diff line number Diff line change
Expand Up @@ -4720,23 +4720,31 @@ class Organization(Document):

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()

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):
Expand Down