Я вижу, что в моих представлениях 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
.
Есть ли общий способ снизить количество запросов, которые необходимо сделать здесь?Любые идеи будут оценены:)
(Если вам интересно, фактический код здесь - ModelA - это опрос, ModelB - это TextChoiceQuestion, ModelC - это TextChoice, а ModelD - это TextChoiceNuance.