Двойное аннотирование Django queryset
def get_queryset(self):
return News.objects.filter(is_published=True).annotate(cnt=Count('comments', distinct=True)).prefetch_related('category', 'votes').annotate(rating=Sum('votes__vote'))
Мне нужно получить здесь количество комментариев и сумму лайков(есть -1 и +1) к объекту, если убрать любую из аннотаций, то код работает отлично, но когда они обе- они перемножаются и дают неадекватный результат. Отношение у News к LikeDislike - GenericRelation. Документацию почитал, пишут что есть Distinct=True, который исключает такое, но работает это только для Count. Костыль есть в виде отдельной функции в менеджере модели LikeDislike:
def sum_rating(self):
return self.get_queryset().aggregate(Sum('vote')).get('vote__sum') or 0
Но конечно же это отдельный запрос для каждого объекта. Есть ли какой-то адекватный способ?