Я создаю сайт электронной коммерции.У меня есть модель Product, которая содержит информацию, общую для всех типов продуктов:
class Product(models.Model):
name=models.CharField()
description=models.CharField()
categories = models.ManyToManyField(Category)
Затем у меня есть SimpleProduct и BundleProduct, которые имеют FK to Product и содержат информацию, относящуюся к типу продукта.BundleProduct имеет поле m2m для других продуктов.
class SimpleProduct(Product):
some_field=models.CharField()
class BundleProduct(Product):
products = models.ManyToManyField(Product)
При отображении каталога я делаю один запрос к модели продукта, а затем другой запрос для каждого продукта, чтобы получить дополнительную информацию.Это связано с большим количеством запросов.
Я могу улучшить его, используя select_related в полях simpleproduct и bundleproduct.Я могу улучшить его, используя приложение select_reverse для m2m-полей, таких как категории.
Это большое улучшение, но есть больше необходимых запросов, потому что у BundleProduct есть несколько продуктов, которые также могут иметь отношения к другим продуктам (настраиваемый продукт).
Есть ли способ создать один запрос к продукту, который будет извлекать категории m2m, one2one SimpleProduct и BundleProduct, а также продукты BundleProduct?
Будет ли этот пользовательский запрос выглядеть как набор запросов djangoсо всеми менеджерами и свойствами?
Спасибо