Actualmente utilizo el siguiente código para crear el conjunto de consultas para mi gráfico de barras de Fusioncharts:

 dataSourceBar['data'] = [] 

    objects_with_category_id_2 = dashboard_input.objects.filter(service_service_id=3,category_category_id=2)

    for obj in objects_with_category_id_2:
        data =  {'label': obj.session_start.strftime("%m.%Y"),
                 'value': obj.input_input_value}
        dataSourceBar['data'].append(data)  

Intenté obtener solo el mes y el año de session_start, pero ahora solo muestra cada mes y año por fecha en que se completa algo.

enter image description here

¿Hay alguna forma de diseñar el conjunto de consultas que sume los diferentes valores por mes (en orden descendente)? ¿De modo que el gráfico solo muestra tres barras: 04.2019, 05.2019 y 06.2019?

1
Natasja 29 jun. 2019 a las 20:40

1 respuesta

La mejor respuesta

Sí, puede anotar y resumir, usando TruncMonth [django-doc] y Sum [django-doc]:

from django.db.models import Sum
from django.db.models.functions import TruncMonth

dashboard_input.objects.filter(
    service_service_id=3,
    category_category_id=2
).annotate(
    label=TruncMonth('session_start')
).values('label').annotate(
    value=Sum('input_input_value')
).order_by('label')

Esto dará como resultado un QuerySet que envuelve los diccionarios. Cada diccionario tiene una clave 'label' que se asigna a un objeto date(..) truncado al mes, y una clave 'value' que se asigna a la suma de los valores 'input_input_value' para ese mes .

1
Willem Van Onsem 29 jun. 2019 a las 17:48