2011-07-20 27 views
0

獲取字典映射PK到模型實例(如in_bulk()函數,但是給定類(模型)的所有對象)的最佳方法是什麼。我想盡量減少SQL查詢的數量。批量分配所有django模型

+0

出了什麼問題'in_bulk'? – sneeu

+0

對。但首先,我需要獲取所有需要1個SQL查詢的pks。比我可以in_bulk()。但是這會產生一個巨大的查詢。我認爲有更好的東西。 – santino

+0

啊,看下我的答案。 – sneeu

回答

1

嘗試dict和列表理解:

model_instances = Model.objects.filter(...) 
in_bulk_style_model_instances = dict([(m.pk, m) for m in model_instances]) 
+2

沒有看到嵌套列表組件的點。爲什麼不在'model_instances中爲m((m.pk,m)m)'? –

+0

@丹尼爾很正確,我猜想一個古老的習慣。 – sneeu

+0

在Python 2.7+中,有一個方便的詞典理解語法,它可以比dict()更高效:{m.pk:m for model_instances} http://doughellmann.com/2012/11/the-性能影響使用字典而不是在cpython-2-7-2.html 不要 – trojjer