2013-02-09 50 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

相關問題