Есть такие модели:
class Product(models.Model):
name = models.CharField()
color_variant_of = models.ForeignKey('self', blank=True, null=True, related_name="color_variants", verbose_name='Вариант цвета')
class ProductColor(models.Model):
name = models.CharField()
hex_name = models.CharField()
class ProductInfo(models.Models):
product = models.OneToOneField(Product)
color = models.ForeignKey(ProductColor)
class ProductImage(models.Model):
product = models.ForeignKey(ProductColor)
image = models.ImageField()
Делаю страницу каталога. Нужно вывести мини-карточки в которых изображение будет меняться в зависимости от выбранного цвета. У товара может быть несколько цветов и это сделано через color_variant_of.
Тоесть я беру товар (Product), дальше беру все варианты цветов - product.color_variants__set.all, из них я беру цвет - product.productinfo.color (а так же все остальные варианты цветов) и изображения product.productimage__set.all
Всё это выливается в 500 и большее запросов в БД при генерации шаблона.
Что с этим делать? Мне нужно как-то меня архитектуру проекта или кешировать что-то или можно как-то соединять вместе запросы до рендера шаблона?