【问题标题】:Django: When I delete item from one of the user's shopping cart, that same item gets deleted from every user's shopping cartDjango:当我从一个用户的购物车中删除商品时,同一商品会从每个用户的购物车中删除
【发布时间】:2019-04-30 06:11:48
【问题描述】:

使用 python 3.7

当我将商品添加到购物车时,商品会单独添加到每个用户,但我在购物车详细信息页面上有删除按钮,views.py 中的函数如下所示:

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_Itemon_delete=models.SET_NULL 更改为on_delete=models.CASCADE,但这似乎并没有改变任何东西。

还有一个奇怪的问题,当购物车是空的并且我添加了第一个项目时,该项目无法从页面中删除,但我可以从 shell 中删除它。

【问题讨论】:

    标签: django e-commerce cart shopping


    【解决方案1】:

    您正在删除实际项目,而不是从多对多中删除它。你应该这样做:

    item = Item.objects.get(pk=item_id)
    shopping_cart.items.remove(item)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-05
      • 2018-10-19
      • 2013-10-17
      • 2021-07-26
      • 1970-01-01
      • 2018-07-22
      • 2020-03-20
      相关资源
      最近更新 更多