2009-08-02 4 views
0

..Djangoを最適化する:モデル情報を一括で取得する..?私はこのような何かをやっているDjangoのビューで

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

遅さは、if文でモデル化するモデル(データベースの行)から行くから来ています。
リストに約486個のアイテムしかない場合、これは実際に実行するのに約1秒かかります。 486 * 2 + 1 dbルックアップが実行されているため、これは遅いと私は考えている。もし私がこれを書き直す場所があれば、model2テーブルとmodel3テーブル全体を一度に取得し、そこからフィルタリングすると、3 dbヒットになるはずです。それはdjangoが作るすべてのnicenessを破壊するでしょう。

djangoにこのような一括データ検索をさせる方法はありますか?

答えて

5

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

を行い、これらがちょうど1 SQLクエリにそれをカットする必要があり

if alist.model2.model3_id == target_id 

を行います。

関連する問題