1

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

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

在此之后,我希望将此 qs 放入缓存中以备后用。我想在不访问数据库的情况下应用所有其他过滤器。就像是

cache.set('qs', qs)

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

4

2 回答 2

0

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

顺便说一句,您可能想查看JohnnyCache ......一个关于查询集缓存的很棒的应用程序。

于 2012-10-04T12:12:37.047 回答
0

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

your_cached_qs = cache.get('qs')

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

your_new_qs = your_cached_qs.filter(further_filter)

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

于 2012-10-04T13:08:49.567 回答