Changeset 7246
- Timestamp:
- 03/15/08 04:12:44 (7 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/queryset-refactor/django/db/models/query.py
r7245 r7246 29 29 30 30 def __repr__(self): 31 return repr(list( iter(self)))31 return repr(list(self)) 32 32 33 33 def __len__(self): 34 return len(list(iter(self))) 34 # Since __len__ is called quite frequently (as part of list(qs), which 35 # means as part of qs.get(), for example), we make some effort here to 36 # be as efficient as possible whilst not messing up any existing 37 # iterators against the queryset. 38 if self._result_cache is None: 39 if self._iter: 40 self._result_cache = list(self._iter()) 41 else: 42 self._result_cache = list(self.iterator()) 43 elif self._iter: 44 self.result_cache.extend(list(self._iter)) 45 return len(self._result_cache) 35 46 36 47 def __iter__(self): 37 pos = 038 48 if self._result_cache is None: 39 49 self._iter = self.iterator() 40 50 self._result_cache = [] 51 if self._iter: 52 return self._result_iter() 53 return iter(self._result_cache) 54 55 def _result_iter(self): 56 pos = 0 41 57 while 1: 42 58 upper = len(self._result_cache)
