Атрибут остается после удаления объекта модели

Когда клиент добавляет товар в корзину, в корзине отображается items и cartItems и все остается как должно быть, но когда кто-то удаляет реальный продукт из списка продуктов, items тоже удаляется как должно быть, но cartItems или количество продуктов, которое было добавлено, остается после того, как продукт не существует, я пытаюсь удалить это, когда продукт не выходит! Текущий код выдает мне эту ошибку, индексы списка должны быть целыми числами или срезами, а не str

Модель

class Order(models.Model):
    ...
    @property
    def get_cart_items(self):
        orderitems = self.orderitem_set.all()
        total = sum([item.quantity for item in orderitems])
        return total

class OrderItem(models.Model):
    product = models.ForeignKey(Product, on_delete=models.SET_NULL, blank=True, null=True)
    order = models.ForeignKey(Order, on_delete=models.SET_NULL, blank=True, null=True)
    quantity = models.IntegerField(default=0)

Utils

def cookieCart(request):
    try:
        cart = json.loads(request.COOKIES['cart'])
    except:
        cart = {}

    #cart prints out this structure '{"15":{"quantity":1}}'
    print('Cart:', cart)

    items = []
    order = {'get_cart_total': 0, 'get_cart_items': 0, 'shipping': False}
    cartItems = order['get_cart_items']

    for i in cart:
        try:
            cartItems += cart[i]["quantity"]
            product = Product.objects.get(id=i)
            total = (product.final_price * cart[i]["quantity"])
            order['get_cart_total'] += total
            order['get_cart_items'] += cart[i]["quantity"]
            item = {
                'product':{
                    'id':product.id,
                    'name':product.name,
                    'final_price':product.final_price,
                    'image_URL':product.image_URL,
                    'availability':product.availability,
                },
                'quantity':cart[i]["quantity"],
                'get_total':total,
                }
            items.append(item)

        except:
            pass

    # clear cartItems if Product does not exist with the same id as cartItems
    ids = all(items['product']['id'])
    for id in ids:
        if not Product.objects.filter(pk=id):
            cartItems.delete()

    return {"items": items, "order": order, "cartItems": cartItems}

def cartData(request):
    if request.user.is_authenticated:
        customer = request.user.customer
        order, created = Order.objects.get_or_create(customer=customer, complete=False)
        items = order.orderitem_set.all()
        cartItems = order.get_cart_items
    else:
        cookieData = cookieCart(request)
        cartItems = cookieData['cartItems']
        order = cookieData['order']
        items = cookieData['items']
    return {'cartItems':cartItems ,'order':order, 'items':items}

Виды

def cart(request):
    data = cartData(request)
    items = data['items']
    cartItems = data['cartItems']

Traceback

Traceback (most recent call last):
  File "D:\test\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "D:\test\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:\test\shop\views.py", line 11, in shop
    data = cartData(request)
  File "D:\test\shop\utils.py", line 66, in cartData
    cookieData = cookieCart(request)
  File "D:\test\shop\utils.py", line 46, in cookieCart
    ids = all(items['product']['id'])

Exception Type: TypeError at /
Exception Value: list indices must be integers or slices, not str
Вернуться на верх