在Django 1.7中使用select_related

时间:2014-07-13 17:03:36

标签: django django-models django-templates django-views

我有这个结构

  • 第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对象的所有子对象?

1 个答案:

答案 0 :(得分:0)

这正是prefetch_related的作用。