Django .annotate TruncMonth : Как получить полный диапазон месяцев

Я хочу получить общий заработок за каждый месяц и отобразить его на графике, поэтому я делаю следующий запрос

Вот мой запрос:

        query = UserOrderService.objects.all()

        query = query.annotate(month=TruncMonth('order_booking_date')).values(
            'month').annotate(no_of_services=Count('pk')).annotate(
            total=Sum(F('service_price') * F('quantity'))).order_by('month')

Вышеприведенный запрос выдает данные только по месяцам, в которых происходило бронирование

Выход:

"data": [
    {
        "no_of_services": 1,
        "total": 26725.0,
        "month": "November"
    },
    {
        "no_of_services": 1,
        "total": 26725.0,
        "month": "December"
    }
]

Так как я хочу получить все данные за все месяцы, даже если в конкретном месяце нет данных

Ожидаемый выход:

"data": [
    {
        "no_of_services": 0,
        "total": 0,
        "month": "January"
    },
    {
        "no_of_services": 0,
        "total": 0,
        "month": "February"
    },
    {
        "no_of_services": 0,
        "total": 0,
        "month": "March"
    },
    
    ...

    {
        "no_of_services": 1,
        "total": 26725.0,
        "month": "November"
    },
    {
        "no_of_services": 1,
        "total": 26725.0,
        "month": "December"
    }
]
Вернуться на верх