from django.db import models
class Product(models.Model):
title = models.CharField(max_length=120)
description = models.TextField()
sell_price = models.DecimalField(max_digits=100, decimal_places=2)
buy_price = models.DecimalField( max_digits=100, decimal_places=2)
qty = models.IntegerField()
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
active = models.BooleanField( default = True)
def __str__(self):
return self.title
class Cart(models.Model):
#user = models.ForeignKey(User, on_delete=models.CASCADE)
products = models.ManyToManyField(Product, null=True, blank=True)
total = models.DecimalField( null=True, max_digits=100, decimal_places=2)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
active = models.BooleanField( default = True)
def __str__(self):
return "Cart id: %s" %(self.id)
и view.py
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect
from django.urls import reverse
from app1.models import Product, Cart
def cart(request):
qty= request.GET.get('qty')
try:
the_id = request.session["cart_id"]
except:
the_id = None
if the_id:
cart = Cart.objects.get(id=the_id)
context = {'cart':cart, 'qty':qty}
else:
empty_message = 'Your cart is Empty, please keep your shopping'
context = {'empty':True, 'empty_message':empty_message}
return render(request, 'cart.html', context)
def add_to_cart(request, pk):
request.session.set_expiry(12000)
try:
qty = request.GET.get['qty']
update_qty = True
except:
qty = None
update_qty = False
try:
the_id = request.session["cart_id"]
except:
new_cart = Cart()
new_cart.save()
request.session["cart_id"] = new_cart.id
the_id = new_cart.id
cart = Cart.objects.get(id=the_id)
try:
product = Product.objects.get(pk=pk)
except Product.DoesNotExist:
pass
if update_qty and qty:
if int(qty)==0:
cart.delete()
else:
product.quantity = qty
product.save()
else:
pass
if not product in cart.products.all():
cart.products.add(product)
qty = request.GET.get('qty')
new_total = 0.00
for item in cart.products.all():
item.qty = qty
print(item.qty)
new_total += float(item.sell_price) * int(item.qty)
request.session['items_total'] = product.cart_set.count()
cart.total = new_total
cart.save()
print(qty)
return HttpResponseRedirect(reverse('cart'))
и шаблон корзины:
<body>
<a href="{% url 'home' %}">Home</a>
<table class="table">
<thead>
<th>product name</th>
<th>product price</th>
<th>Qty</th>
<th></th>
{% for item in cart.products.all %}
<tr>
<td>{{ item.title }}</td>
<td>{{ item.sell_price }}</td>
<td>{{ item.qty }}</td>
<td><a href="{% url 'remove-cart' item.pk %}">Remove</a></td>
</tr>
{% endfor %}
<tfoot>
<tr>
<td></td>
<td>CART TOTAL = {{ cart.total }}</td>
</tr>
</tfoot>
</thead>
</table>
</body>
item.qty почти отображает количество 1, и я ввожу 2 в форму продукта для количества , снова отображение 1 в таблице тележки. но функция totalcart соответствует. это товар. html
<body>
<h1>Name of Product:</h1>
<ul>
<li>Name = {{ product.title }}</li>
<li>Price = {{ product.sell_price }}</li>
<li>Description = {{ product.description }}</li>
</ul>
<form method="GET" action="{% url 'add-cart' product.pk %}">
<input name="qty" type="number" value="1">
<input type='submit' value="Add To CART">
</form>
<a href="{% url 'add-cart' product.pk %}">Add To Cart</a>
</body>
в результате в корзине. html показывает таблицу, в которой есть количество деталей, которые состоят из названия продукта и цены продажи продукта, а также количества продукта и корзины. итого все коэффициент отображения истина, но product.qty отображает почти номер 1