У мене є досить простий запит, який я хотів би зробити через 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, щоб все було послідовно.
Дякую