def iterator(self): superiter = super(CachingQuerySet, self).iterator() while True: obj = superiter.next() # Use cache.add instead of cache.set to prevent race conditions (see CachingManager) cache.add(obj.cache_key, obj, CACHE_DURATION) yield obj
def all(self): key = instance._get_cache_key(field=field_name) qs = super(CachingRelatedManager, self).get_query_set() PKListQuerySet = get_pk_list_query_set(qs.__class__) qs = qs._clone(klass=PKListQuerySet) pk_list = cache.get(key) if pk_list is None: pk_list = qs.values_list('pk', flat=True) cache.add(key, list(pk_list), CACHE_DURATION) else: qs.from_cache = True qs.pk_list = pk_list return qs