Tôi có một truy vấn khá đơn giản mà tôi muốn thực hiện thông qua ORM, nhưng không thể tìm ra ..
Tôi có ba mô hình:
Vị trí (một địa điểm), Thuộc tính (thuộc tính mà một địa điểm có thể có) và Xếp hạng (mô hình M2M 'thông qua' cũng chứa trường điểm)
Tôi muốn chọn một số thuộc tính quan trọng và có thể xếp hạng vị trí của mình theo các thuộc tính đó - tức là tổng điểm cao hơn trên tất cả các thuộc tính đã chọn = tốt hơn.
Tôi có thể sử dụng SQL sau để có được những gì tôi muốn:
select location_id, sum(score)
from locations_rating
where attribute_id in (1,2,3)
group by location_id order by sum desc;
cái nào trả về
location_id | sum
-------------+-----
21 | 12
3 | 11
Điều gần nhất tôi có thể nhận được với ORM là:
Rating.objects.filter(
attribute__in=attributes).annotate(
acount=Count('location')).aggregate(Sum('score'))
Cái nào trả về
{'score__sum': 23}
tức là tổng của tất cả, không được nhóm theo vị trí.
Bất kỳ cách nào xung quanh điều này? Tôi có thể thực thi SQL theo cách thủ công, nhưng muốn thực hiện thông qua ORM để giữ mọi thứ nhất quán.
Cảm ơn