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

@@ -93,7 +93,8 @@ class switch_collection(object):
class no_dereference(object):
""" no_dereference context manager.
Turns off all dereferencing in Documents::
Turns off all dereferencing in Documents for the duration of the context
manager::
with no_dereference(Group) as Group:
Group.objects.find()
@@ -118,21 +119,12 @@ class no_dereference(object):
def __enter__(self):
""" change the objects default and _auto_dereference values"""
if 'queryset_class' in self.cls._meta:
raise OperationError("no_dereference context manager only works on"
" default queryset classes")
objects = self.cls.__dict__['objects']
objects.default = QuerySetNoDeRef
self.cls.objects = objects
for field in self.deref_fields:
self.cls._fields[field]._auto_dereference = False
return self.cls
def __exit__(self, t, value, traceback):
""" Reset the default and _auto_dereference values"""
objects = self.cls.__dict__['objects']
objects.default = QuerySet
self.cls.objects = objects
for field in self.deref_fields:
self.cls._fields[field]._auto_dereference = True
return self.cls
@@ -145,7 +137,7 @@ class QuerySetNoDeRef(QuerySet):
class query_counter(object):
""" Query_counter contextmanager to get the number of queries. """
""" Query_counter context manager to get the number of queries. """
def __init__(self):
""" Construct the query_counter. """