2014-07-13 48 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