在Google App Engine上优化我的Django应用程序

时间:2013-02-09 11:52:39

标签: django google-app-engine optimization

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

根据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'

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

我错过了什么或者文档确实错了吗?实现ValueQuerySet结果的最佳方法是什么,以便我可以将它存储在Memcache中?

1 个答案:

答案 0 :(得分:0)

你误解了文档中的那一点。它没有说“调用queryset.list()方法”:它说“在其上调用list()”。换句话说,请致电list(my_queryset),而不是my_queryset.list() - 事实上,之后会立即通过示例进行明确说明。

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