Двойное аннотирование 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

Но конечно же это отдельный запрос для каждого объекта. Есть ли какой-то адекватный способ?


Ответы (0 шт):