Fixed QuerySetNoCache.count() caching (#410)

This commit is contained in:
Ross Lawley
2013-07-30 10:30:16 +00:00
parent 1e4d48d371
commit 6efd6faa3f
4 changed files with 39 additions and 8 deletions

View File

@@ -60,7 +60,6 @@ class BaseQuerySet(object):
self._none = False
self._as_pymongo = False
self._as_pymongo_coerce = False
self._len = None
# If inheritance is allowed, only return instances and instances of
# subclasses of the class being used
@@ -331,14 +330,9 @@ class BaseQuerySet(object):
:meth:`skip` that has been applied to this cursor into account when
getting the count
"""
if self._limit == 0:
if self._limit == 0 and with_limit_and_skip:
return 0
if with_limit_and_skip and self._len is not None:
return self._len
count = self._cursor.count(with_limit_and_skip=with_limit_and_skip)
if with_limit_and_skip:
self._len = count
return count
return self._cursor.count(with_limit_and_skip=with_limit_and_skip)
def delete(self, write_concern=None, _from_doc_delete=False):
"""Delete the documents matched by the query.

View File

@@ -94,6 +94,21 @@ class QuerySet(BaseQuerySet):
except StopIteration:
self._has_more = False
def count(self, with_limit_and_skip=True):
"""Count the selected elements in the query.
:param with_limit_and_skip (optional): take any :meth:`limit` or
:meth:`skip` that has been applied to this cursor into account when
getting the count
"""
if with_limit_and_skip is False:
return super(QuerySet, self).count(with_limit_and_skip)
if self._len is None:
self._len = super(QuerySet, self).count(with_limit_and_skip)
return self._len
def no_cache(self):
"""Convert to a non_caching queryset