Commits

Anonymous committed 5342345

Fixed #7759 -- Fixed QuerySet.count() when the results cache was only partially
populated.

Comments (0)

Files changed (2)

django/db/models/query.py

         Performs a SELECT COUNT() and returns the number of records as an
         integer.
 
-        If the QuerySet is already cached (i.e. self._result_cache is set) this
-        simply returns the length of the cached results set to avoid multiple
-        SELECT COUNT(*) calls.
+        If the QuerySet is already fully cached this simply returns the length
+        of the cached results set to avoid multiple SELECT COUNT(*) calls.
         """
-        if self._result_cache is not None:
+        if self._result_cache is not None and not self._iter:
             return len(self._result_cache)
 
         return self.query.get_count()

tests/regressiontests/queries/models.py

 ...     obj.save()
 ...     if i > 10: break
 
+Bug #7759 -- count should work with a partially read result set.
+>>> count = Number.objects.count()
+>>> qs = Number.objects.all()
+>>> for obj in qs:
+...     qs.count() == count
+...     break
+True
+
 """}