Django - оптимизация запросов к базе данных - более 100 запросов на запрос - PullRequest
0 голосов
/ 07 марта 2020

models.py

class Category:
  name = ...

class SubCategory:
  name = ...
  category = models.ForeignKey(Category)

class Item:
  name = ...
  category = models.ForeignKey(Category)
  subcategory = models.ForeignKey(SubCategory)

class ItemImage:
  item = models.ForeignKey(Item)
  image = ...

views.py

def show_all(request):
  categories = Category.objects.all()
  return render(request, 'template.html), {'categories':categories})

шаблон. html

{% for cat in categories %}
<!-- cat.name -->

  {% for subcat in cat %}
  <!-- subcat.name -->

    {% for item in subcat.item_set.all %}
    <!-- item.name -->

      <img src="{{item.itemimage_set.first.image.url}}">

Проблема:

последняя итерация в html для itemimage_set вызывает дополнительный запрос для каждого отображаемого элемента. У меня есть 300 элементов для отображения на странице, затем более 300 запросов для каждого запроса. Не знаете, куда добавить prefetch ... или это неизбежно? Пожалуйста, помогите!

...