优化Django:批量获取模型信息..?

时间:2009-08-02 23:20:24

标签: django optimization

在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像这样进行某种批量数据查找?

1 个答案:

答案 0 :(得分:5)

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

并做

if alist.model2.model3_id == target_id

这些应该将其剪切为1个SQL查询。