2009-08-02 75 views
0

在Django視圖我做這樣的事情..優化Django:批量獲取模型信息..?

lists = Stuff.objects.exclude(model2=None) 
for alist in lists:       
    if alist.model2.model3.id == target_id: 
      addSomeStuff 

的緩慢來自於從模型(數據庫的行)要在if語句來建模。
當列表中只有大約486個項目時,這實際需要近一秒的時間才能運行。我相信這很慢,因爲正在執行486 * 2 + 1 db查找。如果我在哪裏重寫這個,所以它一次抓住整個model2表和model3表,然後只是通過那裏過濾,這將是3分貝點擊,我相信它會更快。那會破壞django所做的所有好事。

有沒有什麼辦法說服django做這樣的批量數據查找?

回答

5

Stuff.objects.exclude(model2=None).select_related('model2') 

,做

if alist.model2.model3_id == target_id 

這些應該削減它只是一個SQL語句。