carts.models.Cart.DoesNotExist: Cart matching query does not exist
web.models.py
class Product(models.Model):
FORCE = 'force'
POMPE = 'pompe'
CHOICE_GROUP = (
(FORCE, 'force'),
(POMPE, 'pompe'),
)
name = models.CharField(max_length=30, db_index=True)
number = models.CharField(max_length=30)
description = models.TextField(blank=True)
active = models.BooleanField(default=True)
group = models.CharField(max_length=20, choices=CHOICE_GROUP, default=FORCE)
slug = models.SlugField(unique=True)
price = models.DecimalField(max_digits=10, decimal_places=1)
stock = models.PositiveIntegerField()
image = models.ImageField(default='pictures/product_image/noimage.png', upload_to='pictures/product_image')
def __str__(self):
return self.name
class Meta:
unique_together = ('number', 'slug')
def get_absolute_url(self):
return reverse("single", kwargs={
'slug': self.slug
})
carts.models.py
from django.db import models
from web.models import Product
class CartItem(models.Model):
cart = models.ForeignKey('Cart', null=True, blank=True, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
line_total = models.DecimalField(default=10.99, max_digits=1000, decimal_places=2)
def __str__(self):
return str(self.id)
class Cart(models.Model):
total = models.DecimalField(max_digits=10, decimal_places=2, default=0)
active = models.BooleanField(default=True)
def __str__(self):
return str(self.id)
carts.views.py
from django.shortcuts import render, HttpResponseRedirect
from django.urls import reverse
from .models import Cart, CartItem
from web.models import Product
def view(request):
try:
the_id = request.session['cart_id']
cart = Cart.objects.get(id=the_id)
except:
the_id = None
if the_id:
print("ok")
new_total = 0.00
for item in cart.cartitem_set.all():
line_total = float(item.product.price) * item.quantity
cart.line_total = line_total
new_total += line_total
request.session['items_total'] = cart.cartitem_set.count()
cart.total = new_total
cart.save()
context = {'cart': cart}
else:
empty_message = "Ваша корзина пуста"
context = {"empty": True,
'empty_message': empty_message, }
return render(request, 'view.html', context)
def add_to_cart(request, slug):
request.session.set_expiry(20000)
try:
the_id = request.session['cart_id']
print(the_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)
product = None
try:
product = Product.objects.get(slug=slug)
except Product.DoesNotExist:
pass
except:
pass
try:
qty = request.GET.get('qty')
update_qty = True
except:
qty = 0
update_qty = False
if int(qty) <= product.stock:
product.stock -= int(qty)
product.save()
cart_item = CartItem.objects.create(cart=cart, product=product)
if update_qty and qty:
if int(qty) == 0:
cart_item.delete()
else:
cart_item.quantity = qty
cart_item.save()
else:
pass
return HttpResponseRedirect(reverse("cart"))
else:
return HttpResponseRedirect(reverse("cart"))
Traceback (most recent call last):
Traceback (most recent call last):
File "D:\Django\shop2\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "D:\Django\shop2\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "D:\Django\shop2\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\Django\shop2\carts\views.py", line 46, in add_to_cart
cart = Cart.objects.get(id=the_id)
File "D:\Django\shop2\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "D:\Django\shop2\lib\site-packages\django\db\models\query.py", line 415, in get
raise self.model.DoesNotExist(
carts.models.Cart.DoesNotExist: Cart matching query does not exist.
[26/Apr/2020 13:47:35] "GET /ru/cart/add/7/?qty=1 HTTP/1.1" 500 76066