2013-02-09 55 views
1

我正在优化我的Django应用程序的特定用例。我的第一步是用ValuesQuerySet替换QuerySet。这工作得很好,但我想做更多。现在我正在考虑使用Memcache(该应用程序正在Google App Engine上运行)。所以我的计划是基本上把ValuesQuerySet放在Memcache中。但是我的理解是ValueQuerySet基本上是一个尚未物化的数据结构。为了使缓存工作,ValueQuerySet需要首先实现,然后放入Memcache。在Google App Engine上优化我的Django应用程序

按照Django docs

list(). Force evaluation of a QuerySet by calling list() on it. 

和:

Finally, note a ValuesQuerySet is a subclass of QuerySet, so it has all methods of QuerySet. 

但是当我尝试my_values_qs.list()它抛出一个异常:

AttributeError: 'ValuesQuerySet' object has no attribute 'list' 

所以,虽然ValuesQuerySet是的子类QuerySet它显然不能list()其内容。如果这是真的,那意味着Django文档是错误的或者至少是误导性的。

我是否错过了某些东西或者文档确实是错的?将ValueQuerySet的结果具体化以便我可以将其存储在Memcache中的最佳方法是什么?

+0

参考此票https://code.djangoproject.com/ticket/12549 – catherine 2013-02-09 12:07:21

回答

0

您误解了文档中的那一点。它不会说“拨打queryset.list()方法”:它说“请致电list()”。换句话说,拨打电话list(my_queryset),而不是my_queryset.list() - 事实上,这是紧接着一个例子明确说明。

请注意,这与子类化无关:QuerySet也没有list()方法。

+0

你是对的。大错误。提到的例程是函数而不是方法。我应该更多地关注提供的样本....: - \ – Roger 2013-02-09 22:54:12

相关问题