Django, как использовать значения подзапроса во внешнем запросе
У меня есть запрос, который использует значения из подзапроса. В то время как я могу написать подзапрос в django, я не могу написать основной запрос. Вот небольшой пример (схема department <-- person <-- device --> model):
SELECT
department.id,
AVG(subquery.typeofdevices_count) AS avg_typeofdevice_count_per_department
FROM department
INNER JOIN person ON (department.id = person.department_id)
INNER JOIN device ON (person.id = device.person_id)
INNER JOIN (
SELECT
model.id AS id,
count(DISTINCT device.location_id) filter (WHERE device.type = 'something') AS typeofdevices_count,
FROM model
LEFT OUTER JOIN device ON (model.id = device.model_id)
WHERE ('some-conditions...')
GROUP BY model.id,
) AS subquery ON (subquery.id = device.model_id)
Как видите, внешний запрос использует внутреннее значение typeofdevices_count при объединении с подзапросом id.
Внутренний запрос довольно прост:
subquery = Model.objects.annotate(typeofdevices_count=
Count('device__location_id',
filter=Q(device__type='something'),
distinct=True
)
).filter('some-conditions...').values('id', 'typeofdevices_count')
А как насчет основного запроса? Я пытался сделать следующее:
Department.objects.annotate(avg_typeofdevice_count_per_department=
Avg('persons__devices__model__typeofdevices_count',
filter=Q(persons__devices__model__in=subquery)
)
).values('id', 'avg_typeofdevice_count_per_department')
Но я получил эту ошибку, похоже, что он не распознает аннотацию подзапроса typeofdevices_count
FieldError: Cannot resolve keyword 'typeofdevices_count' into field. Choices are:...
Можете ли вы мне помочь?