Django ORM left join unrelated QuerySet
Ниже приведен очень упрощенный пример того, что я хочу сделать с помощью django ORM. Пожалуйста, не концентрируйтесь на том, как сделать модели лучше (я стараюсь сделать это просто и наглядно), а на том, как получить данные из представленной ситуации. Итак, предположим две модели. Первая
class Car(models.Model):
brand = models.TextField()
model = models.TextField()
segment = models.TextField()
хранит все автомобили со стоянки дилера (разных марок и сегментов). Время от времени дилер делает специальные предложения для автомобилей из данного сегмента, которые хранятся во второй таблице
class Discount:
car_segment = models.TextField()
price_cut = models.IntegerField()
Теперь мы хотим показать все автомобили выбранной пользователем марки, отсортированные по скидке. Обратите внимание, что большинство автомобилей имеют обычную цену (без price_cut, без "соответствующей" записи в таблице Discount. В плоскости SQL то, чего я хочу добиться, выглядит примерно так:
select * from (select * from Car where brand = "Toyota") left join Discount on segment=car_segment order by price_cut, segment;
Как это сделать, используя django ORM?
Например, у нас есть автомобиль:
brand | model | segment |
---|---|---|
toyota | aygo | A |
toyota | yaris | B |
toyota | corolla | C |
toyota | raw4 | 4x4 |
kia | picanto | A |
kia | rio | C |
и скидки
car_segment | price_cut |
---|---|
A | 1000 |
4x4 | 2000 |
и теперь я хочу иметь отфильтрованные автомобили из таблицы Car, отсортированные по price_cut, например
brand | model | segment | price_cut |
---|---|---|---|
toyota | raw4 | 4x4 | 2000 |
toyota | augo | A | 1000 |
toyota | yaris | B | |
toyota | corolla | C |