Django ORM Union как таблица для FROM
Можно ли сделать через Django ORM запросы UNION по нескольким таблицам и потом результат использовать для FROM как общую таблицу.
Делал так qs = q1.union(q2, q3, all=True) но у qs нельзя уже дальше применять filter
Вот такой запрос должен быть в итоге:
SELECT
m.id
,m.count
,m.tp__code
,sco.name AS name
FROM (
SELECT branch_id as id, 'contracts' as tp__code, count(*) AS count FROM d_parts GROUP BY branch_id
UNION ALL
SELECT branch_id as id, 'newparts' as tp__code, count(*) AS count FROM d_new_parts GROUP BY branch_id
UNION ALL
SELECT branch_id as id, 'tires' as tp__code, count(*) AS count FROM d_tires GROUP BY branch_id
UNION ALL
SELECT branch_id as id, 'wheels' as tp__code, count(*) AS count FROM d_wheels GROUP BY branch_id
) as m
INNER JOIN branch sbr ON sbr.branch_id = m.id
INNER JOIN company sco ON sco.company_id = sbr.company_id
Ответы (1 шт):
Автор решения: Абрамов Алексей
→ Ссылка
В частности для PostgreSQL удалось реализовать через CREATE VIEW и получаем в итоге обращение как к обычной таблице.
Просто делаем модель для этой таблицы и делаем запросы как обычно
class VPriceListBranchCounts(models.Model): # CREATE VIEW
part_types = models.JSONField(verbose_name='Типы товаров с количеством')
branch = models.ForeignKey('company.Branch', models.DO_NOTHING, verbose_name='Филиал', db_column='branch_id')
class Meta:
managed = False
db_table = 'v_price_list_branch_counts'
Так же можно воспользоваться модулем django-database-view для создания этой модели, в нем выполняются миграции