【发布时间】:2019-07-02 03:57:45
【问题描述】:
我发现自己在我的 Django 视图中有这种模式:
<ol>
{% for a in ModelA %}
<li>{{ a.title }}</li>
<ol>
{% for b in a.modelb_set.all %}
<li>{{ b.title }}</li>
<ul>
{% for c in b.modelc_set.all %}
<li>{{ c.text }}</li>
<ul>
{% for d in c.modeld_set.all %}
<li>{{ d.text }}</li>
{% endfor %}
</ul>
{% endfor %}
{% endif %}
</ul>
{% endfor %}
</ol>
{% endfor %}
</ol>
这里的问题当然是进行 n^4 次数据库调用,这是非常不可扩展的。对于单个ModelA 对象,我进行了大约23 个SQL 查询,并且我假设这个数字只会随着ModelA 查询数量的增加而增加。
是否有一种通用方法可以减少此处需要进行的查询数量?任何想法将不胜感激:)
(如果你好奇,实际代码是here - ModelA 是 Poll,ModelB 是 TextChoiceQuestion,ModelC 是 TextChoice,ModelD 是 TextChoiceNuance。
【问题讨论】:
标签: python django django-models django-views django-orm