我正在开发一款需要我过滤大量记录的应用。我一直在阅读有关缓存QuerySets
和相关内容的文章,并找到了一些很好的材料。
qs = MyModel.objects.filter(Q(<initial_filter_to_narrow_down_size>))
在此之后,我希望将此qs放在缓存中供以后使用。我想在不点击数据库的情况下应用所有其他过滤器。
之类的东西cache.set('qs', qs)
但是当我qs = qs.filter(q_object)
时会发生什么?缓存会被修改吗?我不希望这样。我希望qs
保持不变,直到我更新它。在这种情况下我该怎么做?
答案 0 :(得分:0)
.filter()在应用过滤器之前克隆查询集。缓存不会受到影响。
顺便说一句,您可能需要查看JohnnyCache ...一个关于查询集缓存的优秀应用。答案 1 :(得分:0)
我从您的问题中了解到,您只需要从缓存中获取查询集,如下所示。
your_cached_qs = cache.get('qs')
然后,应用你想要的过滤器。
your_new_qs = your_cached_qs.filter(further_filter)
这不会影响缓存中的查询集。因此,您的缓存将保持不变,直到您再次自己更新它,并且您将获得所需的结果。