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>
        

Предложения/решения будут высоко оценены. Вот результат enter image description here

Мое предложение - всегда хранить 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

Таким образом, вы непосредственно получите индивидуальный итог & сумму этих итогов

Вернуться на верх