Django: Выполните GROUP BY над набором запросов представления

Мне нужно выполнить group by над набором объектов, уже отфильтрованных стандартными фильтрами django, для фильтрации по тому, сколько объектов в наборе связаны с одним и тем же объектом внешнего ключа. Мой код сейчас (не работает):

class CustomerTicketsViewSet(AbstractViewSet):
    queryset = CustomerTicket.objects.all()
    serializer_class = CustomerTicketSerializer

    def filter_queryset(self, queryset):
        queryset = super().filter_queryset(queryset)

        tr2smp = int(self.request.GET.get('tickets_related_to_same_topic_gte', False))
        if self.action == "list" and tr2smp:
             topics_queryset = queryset.values('topic').annotate(tickets_to_same_mp=Count('topic')) #does not work
             queryset = ..... #filter tickets queryset somehow based on topics_queryset
        return queryset

Если бы я отфильтровал все объекты, я мог бы использовать

CustomerTicket.objects.values('topic').annotate(Count('topic'))

но как я могу сделать то же самое с QuerySet?

Добавьте order_by() в конец вашего запроса:

queryset.values('topic').annotate(Count('topic')).order_by()

Интересную документацию по использованию values() вместе с аннотацией/агрегацией можно найти здесь: https://docs.djangoproject.com/en/4.1/topics/db/aggregation/#values

Вернуться на верх