Как выразить SQL-запрос с помощью Django ORM? - PullRequest
0 голосов
/ 15 октября 2018

У меня есть пример приложения магазина.

Полный код приложения доступен по адресу https://github.com/dry-python/tutorials/tree/master/django

В этом примере пользователь может купить подписку на разные категории контента.

Пользователь может подписаться на один день, месяц или один год.

Каждый период имеет свою цену.

Цена может изменяться во времени, поэтому модель Цена сохраняет нефактические цены, но вся история цен.

Цена с самым последним значением from_date является актуальной.

Это модель цены.

class Price(models.Model):

    category = models.ForeignKey(Category, related_name="prices", on_delete=models.CASCADE)

    from_date = models.DateField()

    cost = models.DecimalField(max_digits=10, decimal_places=2)

    period = models.IntegerField()

Я хочучтобы выбрать самую дешевую (из реальной) цену для каждой категории.

Я могу выразить это следующим SQL-запросом.

SELECT "category_id",
       MIN("cost")
  FROM "example_price"
 WHERE "id" IN (
   SELECT "id"
     FROM "example_price"
    WHERE "category_id" IN (1, 2, 3, 4)
    GROUP BY "category_id", "period"
   HAVING "from_date" = MAX("from_date")
 )
 GROUP BY "category_id"

Как я могу выразить это с помощью Django ORM?

С уважением, Артем.

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