缓存查询集

时间:2012-10-04 12:00:55

标签: python django

我正在开发一款需要我过滤大量记录的应用。我一直在阅读有关缓存QuerySets和相关内容的文章,并找到了一些很好的材料。

qs = MyModel.objects.filter(Q(<initial_filter_to_narrow_down_size>))

在此之后,我希望将此qs放在缓存中供以后使用。我想在不点击数据库的情况下应用所有其他过滤器。

之类的东西
cache.set('qs', qs)

但是当我qs = qs.filter(q_object)时会发生什么?缓存会被修改吗?我不希望这样。我希望qs保持不变,直到我更新它。在这种情况下我该怎么做?

2 个答案:

答案 0 :(得分:0)

.filter()在应用过滤器之前克隆查询集。缓存不会受到影响。

顺便说一句,您可能需要查看JohnnyCache ...一个关于查询集缓存的优秀应用。

答案 1 :(得分:0)

我从您的问题中了解到,您只需要从缓存中获取查询集,如下所示。

your_cached_qs = cache.get('qs')

然后,应用你想要的过滤器。

your_new_qs = your_cached_qs.filter(further_filter)

这不会影响缓存中的查询集。因此,您的缓存将保持不变,直到您再次自己更新它,并且您将获得所需的结果。