【问题标题】:Optimizing my Django app on Google App Engine在 Google App Engine 上优化我的 Django 应用
【发布时间】:2013-02-09 11:52:39
【问题描述】:

我正在优化我的 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 中的最佳方法是什么?

【问题讨论】:

标签: django google-app-engine optimization


【解决方案1】:

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

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

【讨论】:

  • 你是对的。大错误。提到的例程是函数而不是方法。我应该更加注意提供的样本.... :-\
猜你喜欢
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 2011-04-03
  • 2013-12-20
  • 2012-08-15
  • 2010-11-28
  • 1970-01-01
相关资源
最近更新 更多