我正在优化我的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'
所以,虽然ValuesQuerySet
是QuerySet
的子类,但显然不能list()
其内容。如果这是真的,那就意味着Django文档是错误的或者至少是误导性的。
我错过了什么或者文档确实错了吗?实现ValueQuerySet
结果的最佳方法是什么,以便我可以将它存储在Memcache中?
答案 0 :(得分:0)
你误解了文档中的那一点。它没有说“调用queryset.list()
方法”:它说“在其上调用list()
”。换句话说,请致电list(my_queryset)
,而不是my_queryset.list()
- 事实上,之后会立即通过示例进行明确说明。
请注意,这与子类化无关:QuerySet
也没有list()
方法。