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}')