2013-12-17 30 views
4

我想評估一次查詢集,即將對象提取到本地內存,然後繼續在獲取的對象上執行各種filter命令。是否可以強制查詢集評估,同時保留查詢集

當然,我可:

  • 跌落列出內涵和其他本地Python語法,但在許多情況下,Django的ORM的語法更具可讀性。
  • 跳過評估基本查詢集,但後來我得到性能問題,因爲稍後我需要很多filter操作。

那麼..是否有可能強制查詢集評估,同時保留結果作爲queryset對象?

回答

1

您可以通過迭代查詢集輕鬆地進行評估:只要您忽略迭代結果,對象就會保留一個查詢集。

for item in myqueryset: 
    pass 

但是,這不會真的做你想做的,因爲你說你想調用進一步的過濾器方法對評估的查詢集。這是行不通的,因爲filter()涉及修改底層查詢,並將始終命中數據庫。

我不知道爲什麼你認爲如果你跳過評估queryset,你會得到一個性能問題:相反的情況是,你提出的評估是不必要的一步。

+0

'list(myqueryset)'會產生同樣的效果(當然,只要你不重新綁定myqueryset)。只是說... –

3

剛剛做一個len(myqueryset)怎麼樣。

或者只是做一個條件檢查也可以強制評估它。