Mam wiele grup, z których każda ma rewizję, a każda wersja ma kilka miesięcy.
Chcę wydrukować wszystkie obiekty grupy z adnotacją.
Dla każdej grupy powinna wybierać tylko najnowszą wersję, a następnie sumować wszystkie miesiące.
Nie jestem pewien, czy można to zrobić w Django. Próbowałem czegoś takiego
Group.objects.annotate(
month_sum=Revision.objects.filter(date__lte=my_date).latest("date").aggregate(Sum("months__amount"))
)
i miał nadzieję uzyskać zestaw zapytań ze wszystkimi grupami, z których każda ma sumę month_sum
.
Odpowiedzi:
0 dla odpowiedzi № 1Czy możesz spróbować tego:
qs = Group.objects.filter(revision__date__lte=my_date).annotate(month_sum=Sum("months__amount"))
Możesz debugować i próbować wykluczyć, jak wykonać odpowiednie zapytanie, drukując wygenerowane zapytanie DB w powłoce:
print str(qs.query)
Edytować:
Myślę, że aby pokazać nawet Grupy ze starą wersją django-aggregate-if może ci pomóc
Biegać 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)))