首页 > 解决方案 > django 项目无法从购物车中删除

问题描述

使用cart_id会话并尝试将商品添加到购物车将商品添加到购物车可以,但删除商品会显示错误。

cart_update功能中,我可以将商品添加到购物车但我无法删除它?我不明白为什么 whilecart_obj.products.remove(item1)似乎不起作用并没有显示任何错误。

class Product(models.Model):
    title           = models.CharField(max_length=120)
    slug            = models.SlugField(blank=True)
    description     = models.TextField()
    price           = models.DecimalField(decimal_places=2, max_digits=20, default=39.99)
    image           = models.ImageField(upload_to=upload_image_path,null=True, blank=True)
    featured        = models.BooleanField(default=False)
    active          = models.BooleanField(default=True)
    timestamp       = models.DateTimeField(auto_now_add=True)


class OrderItem(models.Model):
    item = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)
    item_cart = models.CharField(max_length=20, null=True, blank=True)

    def __str__(self):
        return f"{self.item.title}"

class Cart(models.Model):
    user        = models.ForeignKey(User,null=True, blank=True,on_delete=models.CASCADE)
    products    = models.ManyToManyField(OrderItem, blank=True)
    subtotal    = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
    total       = models.DecimalField(default=0.00,max_digits=100,decimal_places=2)
    updated     = models.DateTimeField(auto_now=True)
    timestamp   = models.DateTimeField(auto_now_add=True)
    objects = CartManager()

    def __str__(self):
        return str(self.id)
""" new_or_get function returns cardid if exists or create new session of the cart and returns cardid 
"""
def new_or_get(self,request):
    cart_id = request.session.get("cart_id", None)
    qs = self.get_queryset().filter(id=cart_id)
    print("qs",qs)
    if qs.count() == 1:
        cart_obj = qs.first()
        new_obj  = False
        if request.user.is_authenticated and cart_obj.user is None:
            cart_obj.user = request.user
            cart_obj.save()
            print("user is there")
    else:
        cart_obj = Cart.objects.new(user=request.user)
        new_obj=True
        request.session['cart_id'] = cart_obj.id
    return cart_obj ,new_obj


 
""" in this cart_update fumction i can add a item to the cart but i cant remove it ? i cant understand y
"""

def cart_update(request):
    print(request.POST)
    product_id = request.POST.get('product_id')
    product = Product.objects.get(id=product_id)
    print("id", product)
    quantity = 1
    product_obj = Product.objects.get(id=product_id)
    print("product_obj",product_obj)
    if product_id is not None:
        try:
            product_obj = Product.objects.get(id=product_id)
        except Product.DoesNotExist:
            print("shoe message product is gone")
            return redirect("cart:home")
        cart_obj, new_obj = Cart.objects.new_or_get(request)
        print("hi",cart_obj.products.all())
        print("cart_obj",cart_obj)
        print("newobj",new_obj)
        if cart_obj.products.filter(item=product_obj).exists():
            print("in cart")
            item = OrderItem.objects.filter(item=product)
            item1 = item.first()
            cart_obj.products.remove(item1)
            added = False
        else:
            print("add to cart")
            item = OrderItem.objects.create(item=product, item_cart=cart_obj, quantity=quantity)
            cart_obj.products.add(item)
            added = True
        request.session['cart_items'] = cart_obj.products.count()
    return redirect("cart:home")

标签: djangodjango-modelsdjango-rest-frameworkdjango-views

解决方案


if cart_obj.products.filter(item=product_obj).exists():
            print("in cart")
            item = OrderItem.objects.filter(item=product)
            item1 = item.first()
            cart_obj.products.remove(item1)
            cart_obj.save()
            added = False

i didnt save the cart_obj.save()


推荐阅读