Как группировать по И объединяться с Джанго
У меня довольно простой запросхотел бы сделать через ORM, но могуне могу понять это ..
У меня есть три модели:
Местоположение (место), Атрибут (атрибут, который может иметь место) и Рейтинг (M2M 'через' модель, которая также содержит поле оценки)
Я хочу выбрать некоторые важные атрибуты и иметь возможность ранжировать свои местоположения по этим атрибутам - то есть, более высокий общий балл по всем выбранным атрибутам = лучше.
Я могу использовать следующий SQL, чтобы получить то, что я хочу:
select location_id, sum(score)
from locations_rating
where attribute_id in (1,2,3)
group by location_id order by sum desc;
который возвращается
location_id | sum
-------------+-----
21 | 12
3 | 11
Самое близкое, что я могу получить с ORM:
Rating.objects.filter(
attribute__in=attributes).annotate(
acount=Count('location')).aggregate(Sum('score'))
Который возвращается
{'score__sum': 23}
т.е. сумма всех, не сгруппированных по местоположению.
Есть ли способ обойти это? Я мог бы выполнить SQL вручную, но предпочел бы пройти через ORM, чтобы все было согласованно.
Спасибо