Общая стоимость товаров в корзине
Здравствуйте, у меня проблема, я не могу получить общую цену в моем шаблоне. Я понятия не имею, что я сделал не так. Даже если я устанавливаю cart.total = 10 в views.py, это не работает. Это просто 0.00 или ничего не отображается.
models.py
class OrderItem(models.Model):
order_item = models.ForeignKey(Item, on_delete=CASCADE, null=True)
quantity = models.IntegerField(default=1)
class Cart(models.Model):
order_user = models.OneToOneField(User, on_delete=CASCADE)
order_items = models.ManyToManyField(OrderItem)
ordered = models.BooleanField(default=False)
total = models.DecimalField(default=0.00, decimal_places=2, max_digits=11)
@property
def total_price(self):
return self.OrderItem_set.aggregate(
total_price=Sum(F('quantity') * F('item__price'))
)['total_price'] or Decimal('0')
HTML:
{% extends 'shop/base.html' %}
{% block content %}
<div class="container">
{% include 'shop/navbar.html' %}
<div>
{% for item in cart %}
<li>User: {{ item.order_user }}<li/>
<li>Items:
{% for order_item in item.order_items.all %}
{{ order_item.order_item.title}}
{% endfor %}
<li/>
<li>Is ordered: {{ item.ordered }}<li/>
<li>Total: {{ item.total }}<li/>
{% endfor %}
</div>
<td class="num">{{ cart.total_price|floatformat:"2" }}</td>
</div>
{% endblock content %}
В вашем шаблоне вы выводите не результат total_price, а item.total. Который по умолчанию установлен на 0.00.
Так что вместо
<li>Total: {{ item.total }}<li/>
Должно быть
<li>Total: {{ item.total_price }}<li/>