Объединенный запрос от Django ORM

Необходимо получить агрегированные данные из 2 разных таблиц.

Elements 
element_type   tempcolumn
   xyz            test1
   pqr            test2
   xyz            test3

Users: 
  User_names           
   auser
   buser
   cuser

нужен вывод в следующем формате

element_type    count
  xyz             2 
  pqr             1 
  users           3

Пример SQL-запроса:

SELECT element_type, count(*) 
  FROM Elements group by element_type

union

  select 'users',count(*) from Users

Можем ли мы оправдать то же самое с Django Orm?

1 ответ

Решение

На Django вы можете использовать | чтобы объединить два набора запросов, но я здесь не использую.

Поскольку values ​​/ annotate фактически возвращает список кортежей вместо query_set

Вы можете запустить сырой SQL на Django, но сырье для оптимизации. https://docs.djangoproject.com/en/1.9/topics/db/sql/

object_count = Elements.objects.all().values('element_type').annotate(total=Count('element_type'))
response_data = {}
for q in object_count:
    if q['element_type'] == 'xyz':
        response_data['total_ xyz'] = q['total']
    if q['element_type'] == 'pqr':
        response_data['total_ pqr'] = q['total']
response_data['users_count'] = MyUser.objects.all().count()
Другие вопросы по тегам