Ошибка при удалении товара из корзины в Django? - PullRequest
0 голосов
/ 26 мая 2019

Я столкнулся с ошибкой при удалении товаров из корзины. Когда я добавляю товар в корзину, устанавливая количество и нажимая на кнопку «Удалить», появляется сообщение об ошибке.

локальная переменная 'product', на которую ссылается перед присвоением

У меня есть продукт в файле models.py и я ссылаюсь на него, импортировав модели, и попытался изменить имя, но все равно выдает ошибку.

views.py

def update_cart(request,slug):
request.session.set_expiry(1200000)
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(slug=slug)
except Product.DoesNotExist:
    pass
except:
    pass

cart_item,created=CartItem.objects.get_or_create(cart=cart,product=product)
if created:
    print("yeah")
    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("carts:cart"))

models.py

class CartItem(models.Model):
    cart=models.ForeignKey('Cart',on_delete=models.SET_NULL,null=True,blank=True)
    product=models.ForeignKey(Product,on_delete=models.SET_NULL,null=True,blank=True)
    accessory = models.ForeignKey(Accessories,on_delete=models.SET_NULL,null=True,blank=True)
    quantity=models.IntegerField(default=1)
    updated  = models.DateTimeField(auto_now_add=True,auto_now=False)
    line_total=models.DecimalField(default=10.99,max_digits=1000,decimal_places=2)
    timestamp = models.DateTimeField(auto_now_add=True,auto_now=False)

    objects = CartManager()


    def __unicode__(self):
        try:
           return str(self.cart.id)
        except:
            return self.product.title

Если кто-нибудь может помочь, это будет очень признательно?

Примечание Я видел другую ссылку на stackoverflow, но никто не помог.

1 Ответ

0 голосов
/ 27 мая 2019

Ваша переменная продукта находится внутри блока try, и интерпретатор Python не может ее увидеть.Вы можете создать его вне блока try:

....
product = None
try:
    product=Product.objects.get(slug=slug)

или переместить логику для работы с продуктом в блок try, сразу после назначения продукта

cart = Cart.objects.get(id=the_id)
try:
    product=Product.objects.get(slug=slug)
    cart_item,created=CartItem.objects.get_or_create(cart=cart,product=product)
    if created:
        print("yeah")
        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("carts:cart"))
except Product.DoesNotExist:
    pass
except:
    pass
...