Django Частичный итог в соответствующих строках
Я пытаюсь вывести конкретную мудрую сумму в счете-фактуре, используя Django. Проблема в том, что если я использую цикл for, то он печатает последние элементы с конкретным итогом везде. Я в замешательстве, как лучше всего вычислить индивидуальный итог в соответствующих строках? Вот мой Views.py:
def order_complete(request):
order_number = request.GET.get('order_number')
transID = request.GET.get('payment_id')
try:
order = Order.objects.get(order_number=order_number, is_ordered=True)
ordered_products = OrderProduct.objects.filter(order_id = order.id)
total=0
subtotal = 0
for i in ordered_products:
total = i.product_price * i.quantity
subtotal += total
payment = Payment.objects.get(payment_id = transID)
context ={
'order': order,
'ordered_products': ordered_products,
'order_number': order.order_number,
'transID': payment.payment_id,
'payment': payment,
'subtotal': subtotal,
'total':total,
}
return render(request, 'orders/order_complete.html', context)
except(Payment.DoesNotExist, Order.DoesNotExist):
return redirect('home')
models.py
class OrderProduct(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE)
payment = models.ForeignKey(Payment, on_delete=models.SET_NULL, blank=True, null=True)
user = models.ForeignKey(Account, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
variations = models.ManyToManyField(Variation, blank=True)
quantity = models.IntegerField()
product_price = models.FloatField()
ordered = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.product.product_name
шаблон
<dd class="text-right">${{ total }}</dd>
Предложения/решения будут высоко оценены.
Вот результат

Мое предложение - всегда хранить total_amount в самой таблице вместе с unit_price и quantity,
Потому что таким образом, если вы когда-нибудь захотите получить стоимость единицы товара, вы можете просто получить доступ к ней в самой таблице заказов, а итоговая сумма будет говорить, что это total из unit price x quantity
Еще одно преимущество, которое вы получаете благодаря этому, т.е. при подсчете итоговой суммы всех позиций заказа вы можете просто написать следующее, чтобы получить ее
from django.db.models import Sum
order_products = OrderProduct.objects.filter(order_id=order.id)
total_amount = order_products.aggregate(Sum('total_amount'))["total_amount__sum"]
# total_amount is the new field to add in OrderProduct table which stores
# quantity * unit_price at the time of creation
Таким образом, вы непосредственно получите индивидуальный итог & сумму этих итогов