1

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

根据Django 文档

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中的最佳方法是什么?

4

1 回答 1

0

您从文档中误读了那一点。它没有说“调用queryset.list()方法”:它说“调用list()它”。换句话说, call list(my_queryset),而不是my_queryset.list()- 事实上,随后立即通过示例明确说明了这一点。

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

于 2013-02-09T19:37:29.287 回答