Есть функция:
#
@action(
detail=False, methods=['get'], permission_classes=[IsAuthenticated])
def download_shopping_cart(self, request):
# получаем список ингредиентов с их количеством
ingredients = IngredientAmount.objects.filter(
recipe__cart__user=request.user).values(
'ingredients__name',
'ingredients__measurement_unit').annotate(total=Sum('amount'))
# готовим текстовое сообщения из списка ингредиентов
shopping_cart = '\n'.join([
f'{ingredient["ingredients__name"]} - {ingredient["total"]} '
f'{ingredient["ingredients__measurement_unit"]}'
for ingredient in ingredients
])
filename = 'shopping_cart.txt'
# отправляем файл без сохрания на диске
response = HttpResponse(shopping_cart, content_type='text/plain')
response['Content-Disposition'] = f'attachment; filename={filename}'
return response
в которой выводится список со значениями, но одинаковые значения должны суммироваться, чтобы получить общий вес. Как в данном случае элегантно решить задачу?
UPD:
ingredients__name - наименование ингредиента
ingredient["ingredients__measurement_unit - единица измерения веса
amount - вес ингредиента