Eu tenho muitos grupos que cada um tem uma revisão e cada revisão tem alguns meses.
Eu quero produzir todos os objetos do grupo com uma anotação.
Para cada grupo, basta selecionar a revisão mais recente e somar todos os meses.
Eu não tenho certeza se isso pode ser feito no Django. Eu tentei algo como
Group.objects.annotate(
month_sum=Revision.objects.filter(date__lte=my_date).latest("date").aggregate(Sum("months__amount"))
)
e esperava obter um queryset com todos os grupos, cada um com uma soma month_sum
.
Respostas:
0 para resposta № 1Você pode tentar este:
qs = Group.objects.filter(revision__date__lte=my_date).annotate(month_sum=Sum("months__amount"))
Você pode depurar e tentar entender como fazer a consulta correta imprimindo a consulta de banco de dados gerada no shell:
print str(qs.query)
Editar:
Para mostrar até mesmo grupos com revisão antiga eu acho django-agregado-se pode te ajudar
Corre pip install django-aggregate-if
from django.db.models import Q
from aggregate_if import Sum
revision = Revision.objects.filter(revision__date__lte=my_date).latest()
qs = Group.objects.all().annotate(month_sum=Sum("months__amount", only=Q(revision=revision)))