Added no_dereference method for querysets (#82) (#61)

This commit is contained in:
Ross Lawley
2013-01-24 17:33:10 +00:00
parent ed2ea24b75
commit ba48dfb4bf
8 changed files with 61 additions and 22 deletions

View File

@@ -42,6 +42,7 @@ class QuerySet(object):
providing :class:`~mongoengine.Document` objects as the results.
"""
__dereference = False
_auto_dereference = True
def __init__(self, document, collection):
self._document = document
@@ -145,10 +146,12 @@ class QuerySet(object):
elif isinstance(key, int):
if queryset._scalar:
return queryset._get_scalar(
queryset._document._from_son(queryset._cursor[key]))
queryset._document._from_son(queryset._cursor[key],
_auto_dereference=self._auto_dereference))
if queryset._as_pymongo:
return queryset._get_as_pymongo(queryset._cursor.next())
return queryset._document._from_son(queryset._cursor[key])
return queryset._document._from_son(queryset._cursor[key],
_auto_dereference=self._auto_dereference)
raise AttributeError
def __repr__(self):
@@ -515,7 +518,7 @@ class QuerySet(object):
'_where_clause', '_loaded_fields', '_ordering', '_snapshot',
'_timeout', '_class_check', '_slave_okay', '_read_preference',
'_iter', '_scalar', '_as_pymongo', '_as_pymongo_coerce',
'_limit', '_skip', '_hint')
'_limit', '_skip', '_hint', '_auto_dereference')
for prop in copy_props:
val = getattr(self, prop)
@@ -1135,6 +1138,12 @@ class QuerySet(object):
self.__dereference = _import_class('DeReference')()
return self.__dereference
def no_dereference(self):
"""Turn off any dereferencing."""
queryset = self.clone()
queryset._auto_dereference = False
return queryset
# Helper Functions
def _item_frequencies_map_reduce(self, field, normalize=False):