Python добавляет, когда записи имеют одинаковые имена

У меня есть модель с зарегистрированными продажами издательства. С помощью следующего кода я могу получить название книги и количество, которое купил клиент:

a=Sale.objects.all()
    for b in a:
        print(str(b.book) + ' ' + str(b.quantity))

Так я получаю что-то вроде этого:

Del mismo modo en el sentido contrario 15
Sobre el horror 1
Del mismo modo en el sentido contrario 5
Del mismo modo en el sentido contrario 2
Un lápiz labial para una momia 1
La cólera en los tiempos del amor 3
La cólera en los tiempos del amor 1
La cólera en los tiempos del amor 1
El tambor encantado 1

Теперь мне нужен цикл, чтобы каждая запись, имеющая одинаковое название книги, суммировалась или добавляла номер количества. Есть идеи, как этого добиться?

Для Django, чтобы сделать это полностью в базе данных, похоже, вы хотите агрегацию, используя .values():

for book, total_sales in Sale.objects.values('book').annotate(total_sales=Sum('quantity')).values_list('book', 'total_sales'):
    print(book, total_sales)

В общем случае, если речь идет не только о Django, следует использовать collections.Counter:

books_sold = collections.Counter()
for sale in Sale.objects.all():
    books_sold[str(sale.book)] += b.quantity
for book, quantity in books_sold.items():
    print(book, quantity)
<
from django.db.models import Sum

books = Book.objects.annotate(
    total_quantity=Sum('sale__quantity')
)

for book in books:
    print(f'{book} {book.total_quantity}')
Вернуться на верх