2014-07-13 45 views
0

我有這樣的結構使用select_related在Django 1.7

  • 組1
    • 組2
      • 組3

我想打印的所有組。現在我在模板中做這個作爲

<ul> 
{% for group1 in group1_list %} 
    <li>{{ group1 }}</li> 
    <ul> 
     {% for group2 in group1.group2_set.all %} 
      <li>{{ group2 }}</li> 
      <ul> 
       {% for group3 in group2.group3_set.all %} 
        <li>{{ group3 }}</li> 
       {% endfor %} 
      </ul> 
     {% endfor %} 
    </ul> 
{% endfor %} 
</ul> 

,但它佔用了所有的數據庫調用存儲了很多,所以我在想,如果我可以做同樣的select_related

我可以使用Group3.objects.all().select_related('group2','group2__group1')並按照我的意願打印對象{% regroup %}標記。

當組2對象沒有任何相關的組3對象時會出現問題。是否有可能從所有組1對象走過並選擇組1和組2對象的所有孩子?

+0

我不明白你爲什麼在問題中指定了「Django 1.7」,因爲這似乎沒有特定的版本。 –

回答

0

這正是prefetch_related所做的。

+1

它會是什麼? 'Group1.objects.all()。prefetch_related('group2_set','group2_set__group3_set')'或者什麼? – Jamgreen