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


Ответы (0 шт):