Я изучаю Django и создаю приложение для корзины. Здесь я пытаюсь отобразить на странице HTML сумму всех цен товаров в корзине.
Теперь я знаю, что это, вероятно, худший способ сделать это, так как у меня есть Я видел много учебных пособий, но я бы лучше изучал пошагово.
Итак, я делаю здесь, устанавливая переменную 'total', равную сумме всех цен, с использованием документированной функции Sum()
здесь .
Проблема в том, что он отображает число с 13 десятичными знаками, хотя моя модель допускает только 2 десятичных знака. Как я могу преодолеть эту проблему?
Вот весь код, и, очевидно, если у вас есть какие-либо советы о лучшем способе «basi c», чтобы сделать это (лучшая практика), пожалуйста, дайте мне знать в комментарии.
'models.py'
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Item(models.Model):
name = models.CharField(max_length=25)
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.name
class Cart(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
items = models.ManyToManyField(Item)
def __str__(self):
return 'Order number: %s' % self.id
'views.py'
from django.shortcuts import render
from .models import Cart, Item
from django.db.models import Sum
# Create your views here.
def home(request):
items = Item.objects.all()
carts = Cart.objects.all()
length = len(Cart.objects.all())
cart = carts[length - 1]
cart_items = cart.items.all()
total = cart_items.aggregate(Sum('price'))['price__sum']
return render(request, 'cart/home.html', {'cart': cart,
'items': items,
'cart_items': cart_items,
'total': total})
и мой 'дом. html'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home page</title>
</head>
<body>
<div><h1>Menu</h1></div>
{% for item in items %}
<ul>{{ item }} £{{ item.price}} <button>Add</button></ul>
{% endfor %}
<div><h1>Order</h1></div>
{{ cart }}
{% for item in cart_items %}
<ul>{{ item.name }} {{ item.price }}</ul>
{% endfor %}
<h2>Total</h2>
{{ total }}
</body>
</html>