Оптимизация запросов Django - PullRequest
1 голос
/ 19 июля 2011

У меня есть страница, где пользователи могут видеть список комментариев для определенного продукта.

В представлении я получаю список с:

comments = product.comments.all().order_by('-timestamp')

и этот кусок в шаблоне:

1   {% if comments %}
2       {% for comment in comments %}
3       <div class="comment">
4           <a href="/user/{{ product.author }}/">{{ comment.author }}</a>
5           <br>{{ comment.text }}
6       </div>
7       {% endfor %}
8   {% endif %}

Используя панель инструментов отладки django, когда я захожу на страницу продукта, я вижу, что Django выполняет много запросов, много комментариев в списке. Например, на странице продукта со списком комментариев из 10 комментариев Django выполняет около 15 запросов. Если я отправлю новый комментарий, количество запросов увеличится до 16.

Если я попытаюсь удалить {{ comment.author }} (строка 4), запросы уменьшатся до фиксированного числа, если я отправлю новые комментарии. Как это оптимизировать?

Примечание: comment.author - это ForeignKey для django.contrib.auth.models.User

1 Ответ

4 голосов
/ 19 июля 2011

Я думаю, что это случай для select_related?

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

...