Как упростить избыточный код в Django queryset
Я хочу построить график количества регистраций клиентов в месяц/сотрудника за этот год. Приведенный ниже код используется для получения желаемого набора запросов, но в аннотациях есть много пересекающихся частей, поэтому я хочу свести этот код к минимуму. Кроме того, есть хлопоты, связанные с необходимостью менять год при каждом изменении года, поэтому я надеюсь, что эта проблема также будет решена.
(* Для справки, ось x - "месяц", ось y - "имя сотрудника" (uploader_id__first_name ))
[views.py]
monthly_enroll = Feedback.objects\
.values('uploader_id__first_name').distinct().order_by('uploader_id__first_name')\
.annotate(jan=Count('client_id', filter=Q(enroll_date__gte='2022-01-01', enroll_date__lte='2022-01-31')),
feb=Count('client_id', filter=Q(enroll_date__gte='2022-02-01', enroll_date__lte='2022-02-28')),
mar=Count('client_id', filter=Q(enroll_date__gte='2022-03-01', enroll_date__lte='2022-03-31')),
apr=Count('client_id', filter=Q(enroll_date__gte='2022-04-01', enroll_date__lte='2022-04-30')),
may=Count('client_id', filter=Q(enroll_date__gte='2022-05-01', enroll_date__lte='2022-05-31')),
jun=Count('client_id', filter=Q(enroll_date__gte='2022-06-01', enroll_date__lte='2022-06-30')),
jul=Count('client_id', filter=Q(enroll_date__gte='2022-07-01', enroll_date__lte='2022-07-31')),
aug=Count('client_id', filter=Q(enroll_date__gte='2022-08-01', enroll_date__lte='2022-08-31')),
sept=Count('client_id', filter=Q(enroll_date__gte='2022-09-01', enroll_date__lte='2022-09-30')),
oct=Count('client_id', filter=Q(enroll_date__gte='2022-10-01', enroll_date__lte='2022-10-31')),
nov=Count('client_id', filter=Q(enroll_date__gte='2022-11-01', enroll_date__lte='2022-11-30')),
dec=Count('client_id', filter=Q(enroll_date__gte='2022-12-01', enroll_date__lte='2022-12-31')),)\
.values_list('uploader_id__first_name', 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sept', 'oct','nov', 'dec')\
.order_by('uploader_id__first_name')