django - 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")
解决方案
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()
推荐阅读
- replace - 如何从数据框的子集中删除值
- regex - Powershell RegEx 在空行之后包含所有输出
- python - 从 Twilio Message 获取消息内容
- python - 我如何创建返回按钮 tkinter
- ios - SQLite.swift 框架
- python - 为什么在这个函数中使用 self ?
- android - 我创建的本地通知正在立即发送,而不是在我希望发送的日期
- reactjs - Reactjs 团队是否避免实现自己的类似 redux 的状态管理?
- sql-server - 在sql数据库中最后一次出现“_”后获取子字符串值
- r - 展开 scale_x_continuous()