Eu tenho
class Book(models.Model):
title = models.CharField(max_length=32)
class Table(models.Model):
book = models.ForeignKey(Book, related_name='tables')
class TableEntry(models.Model):
table = models.ForeignKey(Table, related_name='entries')
value = models.FloatField()
e deseja um conjunto de consultas de livros que tenha anotado para cada livro a soma de todas as entradas de tabela deste livro.
Eu tentei
Book.objects.all().annotate(sum=Sum('tables__entries'))
mas isso não parece funcionar. [Edição: Parece funcionar, afinal, como esperado.]
Observe que a ideia funciona quando a soma de todas as entradas de cada tabela deve ser anotada:
Table.objects.all().annotate(sum=Sum('entries'))
Você pode anotar os
Table
s pré-buscados, como:Se você acessar uma
Book
instância (nomeadabook
por exemplo), elabook.tables.all()
é umaQuerySet
deTable
s com cada um um atributo extrasum
que é a somavalue
de deentries
doTable
.