Django 在模板中迭代RelatedManager对象时是否可以减少查询?
这是一个简单的假设。在我的Django应用程序中,我有Kit、KitSku和Sku的模型。KitSku模型将Sku与套件相关联,并提供该套件中该Sku的数量。在模板中,我有如下内容:Django 在模板中迭代RelatedManager对象时是否可以减少查询?,django,Django,这是一个简单的假设。在我的Django应用程序中,我有Kit、KitSku和Sku的模型。KitSku模型将Sku与套件相关联,并提供该套件中该Sku的数量。在模板中,我有如下内容: <!-- SELECT * FROM kitsku_table WHERE kit_id = <Kit.id> --> {% for kitsku in kit.kitsku_set.all %} <!-- SELECT * FROM sku_table WHERE sku = &
<!-- SELECT * FROM kitsku_table WHERE kit_id = <Kit.id> -->
{% for kitsku in kit.kitsku_set.all %}
<!-- SELECT * FROM sku_table WHERE sku = <KitSku.sku> -->
<div>{{ kitsku.sku.name }}</div>
{% endfor %}
{kit.kitsku_set.all%}
{{kitsku.sku.name}
{%endfor%}
现在,这里的问题是Django正在查询所有KitSku行,然后它在每个迭代的单独SQL查询中查询for循环中的每个sku
我可以让kitsku_set.all()调用生成的SQL查询与Sku模型执行联接吗
第一个查询需要更像:
SELECT * FROM kitsku_table k LEFT JOIN sku_table s ON (k.sku = s.sku)
WHERE k.kit_id = <Kit.id>
选择*从kitsku_表k左连接sku_表s ON(k.sku=s.sku)
其中k.kit_id=
在视图中执行此类逻辑,并使用直接查询外键
kitskus = Kit.objects.get(id=3).kitsku_set.select_related('sku')
return direct_to_template(request, "mytemplate.html", {'kitskus': kitskus})
我只是复制了一个类似问题的答案,但我认为这是一个更好的方法 看法 模板
{% block content %}
{% for newsletter in newsletter_list %}
<h2>{{ newsletter.label }}</h2>
<p>Volume {{ newsletter.volume }}, Number {{ newsletter.number }}</p>
<p>{{ newsletter.article }}</p>
<ul>
{% for a in newsletter.article_set.all %}
<li>{{ a.title }}</li>
{% endfor %}
</ul>
{% endfor %}
{% endblock %}
{%block content%}
{时事通讯中的时事通讯%u列表%}
{{newsletter.label}
卷{{newsletter.Volume},编号{{newsletter.Number}
{{newsletter.article}
{newsletter.article_set.all%}
- {{a.title}}
{%endfor%}
{%endfor%}
{%endblock%}
以下是完整的解释:
希望有帮助
很公平。在我的视图中使用select_related()就是一个好方法。我只是想也许那里有一些Django魔法。
{% block content %}
{% for newsletter in newsletter_list %}
<h2>{{ newsletter.label }}</h2>
<p>Volume {{ newsletter.volume }}, Number {{ newsletter.number }}</p>
<p>{{ newsletter.article }}</p>
<ul>
{% for a in newsletter.article_set.all %}
<li>{{ a.title }}</li>
{% endfor %}
</ul>
{% endfor %}
{% endblock %}