2012-10-04 143 views
4

我正在处理一个需要我过滤大量记录的应用程序。我一直在读缓存QuerySets和相关的东西,并找到一些好的材料。缓存查询集

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

在此之后,我希望将此qs放入缓存以备后用。我想要应用所有其他过滤器而不碰到数据库。像

cache.set('qs', qs) 

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

回答

0

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

顺便说一句,你可能想检查JohnnyCache ...一个关于查询集缓存的好应用。

0

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

your_cached_qs = cache.get('qs') 

然后,应用您想要的任何过滤器。

your_new_qs = your_cached_qs.filter(further_filter) 

这不会影响在缓存中设置的查询。因此,您的缓存将保持不变,直到您再次自行更新并达到预期效果。