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