Как правильно написать API для корзины?
Всем привет, столкнулся с небольшой проблемой при написании для корзины, тк впервые это учу. В общем проблема в следующем - у меня на сайте есть корзина, в которой отображается названия товара, количество, цена за единицу товара и общая стоимость всего количества.При написании кода на чистом Django все хорошо работает - при увеличении количества товара правильно считается сумма и итоговая стоимость. А вот при создании API для корзины у меня возникает такая ошибка - товар в корзину добавляется, цена отображается корректно, однако сумма не считается. Как я понимаю, проблема здесь в том что в модели корзины у меня нет такого поля - стоимость, есть только цена. А стоимость формируется в шаблоне при нажатии на кнопку добавить 1 единицу товара отдельной функцией:
def cart_add(request, product_id):
product = Product.objects.get(id=product_id)
price = product.price
carts = Cart.objects.filter(user=request.user, product=product)
if not carts.exists():
Cart.objects.create(user=request.user, product=product, quantity=1, price=price)
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
else:
cart = carts.first()
cart.quantity += 1
**cart.price += price**
cart.save()
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Модель корзины:
class Cart(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(default=0)
price = models.FloatField(default=0)
created_timestamp = models.DateTimeField(auto_now_add=True)
Как я понимаю придется заново модель корзины писать? Или как мне сделать так чтобы при добавлении товара через API, на сайте в шаблоне нормально формировалась стоимость общая товара?
Вот так выглядит корзина на сайте(первые 2 товара добавлены на сайте, последний товар через API):
Спустя время разобрался сам, поэтому отвечу, вдруг пригодится:
В моделях можно использовать методы. Поэтому я написал в модели корзины такую штучку:
class Cart(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(default=0)
price = models.FloatField(default=0)
created_timestamp = models.DateTimeField(auto_now_add=True)
def get_total_price(self):
return self.product.price * self.quantity
И теперь в шаблоне джанго можно к get_total_price()
обращаться как к атрибуту класса, и все сработает.