Django получает количество связанных объектов со значением и добавляет его в аннотацию

Если я хочу указать количество связанных объектов для каждого родительского объекта, я сделаю следующее:

Agent.objects.annotate(deal_count=Count('deal'))

Если мои объекты Deal имеют булево значение closed, как мне аннотировать количество сделок, отмеченных как закрытые?

Вы можете работать с параметром filter=… [Django-doc]:

from django.db.models import Q

Agent.objects.annotate(deal_count=Count('deal', filter=Q(deal__closed=True)))

или если вы хотите аннотировать с обоими подсчетами:

from django.db.models import Q

Agent.objects.annotate(
    deal_count=Count('deal'),
    closed_deal_count=Count('deal', filter=Q(deal__closed=True))
)
Вернуться на верх