Django:当我从一个用户的购物车中删除商品时,同一商品会从每个用户的购物车中删除
Django: When I delete item from one of the user's shopping cart, that same item gets deleted from every user's shopping cart
使用 python 3.7
当我将商品添加到购物车时,商品会单独添加到每个用户,但我在购物车详细信息页面上有删除按钮和 views.py[=26= 中的功能] 看起来像这样:
def delete_cart_item(request, item_id):
user_profile = get_object_or_404(User_Profile, user=request.user)
shopping_cart = user_profile.shopping_cart_set.first()
item = shopping_cart.items.get(pk=item_id)
item.delete()
return redirect('Sales:cart_details')
这些是我的模型:
class User_Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Item(models.Model):
item_name = models.CharField(max_length=200)
item_price = models.IntegerField()
item_description = models.CharField(max_length=300)
item_bought_price = models.IntegerField()
stock_level = models.IntegerField()
restock_level = models.IntegerField()
class Cart_Item(models.Model):
item = models.OneToOneField(Item, on_delete=models.SET_NULL, null=True)
class Shopping_Cart(models.Model):
ref_code = models.CharField(max_length=15)
owner = models.ForeignKey(User_Profile, on_delete=models.SET_NULL, null=True)
items = models.ManyToManyField(Cart_Item)
这里有什么问题?我尝试将 Cart_Item
的 on_delete=models.SET_NULL
更改为 on_delete=models.CASCADE
,但这似乎没有任何改变。
还有一个奇怪的问题,当购物车是空的并且我添加了第一个项目时,该项目无法从页面中删除,但是我可以从 shell 中删除它。
您正在删除实际项目,而不是从多对多中删除它。你应该这样做:
item = Item.objects.get(pk=item_id)
shopping_cart.items.remove(item)
使用 python 3.7
当我将商品添加到购物车时,商品会单独添加到每个用户,但我在购物车详细信息页面上有删除按钮和 views.py[=26= 中的功能] 看起来像这样:
def delete_cart_item(request, item_id):
user_profile = get_object_or_404(User_Profile, user=request.user)
shopping_cart = user_profile.shopping_cart_set.first()
item = shopping_cart.items.get(pk=item_id)
item.delete()
return redirect('Sales:cart_details')
这些是我的模型:
class User_Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Item(models.Model):
item_name = models.CharField(max_length=200)
item_price = models.IntegerField()
item_description = models.CharField(max_length=300)
item_bought_price = models.IntegerField()
stock_level = models.IntegerField()
restock_level = models.IntegerField()
class Cart_Item(models.Model):
item = models.OneToOneField(Item, on_delete=models.SET_NULL, null=True)
class Shopping_Cart(models.Model):
ref_code = models.CharField(max_length=15)
owner = models.ForeignKey(User_Profile, on_delete=models.SET_NULL, null=True)
items = models.ManyToManyField(Cart_Item)
这里有什么问题?我尝试将 Cart_Item
的 on_delete=models.SET_NULL
更改为 on_delete=models.CASCADE
,但这似乎没有任何改变。
还有一个奇怪的问题,当购物车是空的并且我添加了第一个项目时,该项目无法从页面中删除,但是我可以从 shell 中删除它。
您正在删除实际项目,而不是从多对多中删除它。你应该这样做:
item = Item.objects.get(pk=item_id)
shopping_cart.items.remove(item)