пользовательский запрос в Django - PullRequest
0 голосов
/ 02 июля 2010

Я создаю сайт электронной коммерции.У меня есть модель 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со всеми менеджерами и свойствами?

Спасибо

1 Ответ

0 голосов
/ 02 июля 2010

Вы можете взглянуть на дополнительный метод наборов запросов.Может дать вам возможность добавить некоторые дополнительные поля.Но если вам нужны необработанные запросы, вы можете использовать raw метод менеджеров, они будут возвращать тип набора запросов, который, однако, не будет использовать всю мощь обычных наборов запросов, но этого должно быть достаточно для ваших задач.На той же странице также показан метод execute, предназначенный для действительно пользовательских sql, которые не могут даже преобразоваться в необработанные наборы запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...