0

我正在关注 django ecommerce book 中的购物车示例,在从购物车中删除商品时遇到问题,我无法从会话中删除单个商品。

这是我的 cart.py 的一部分

class Cart(object):
    class Item(object):
    def __init__(self, itemid, product, quantity=1, price=0):
    self.itemid = itemid
    self.product = product
    self.quantity = quantity
    self.price = price
    self.totalprice = price * quantity
def remove_item(self, itemid):
    self.items = filter(lambda x: x.itemid != itemid, self.items)

视图.py

def remove_from_cart(request, cart_item_id):
     cart = get_shopping_cart(request)
     cart.remove_item(int(cart_item_id))
     update_shopping_cart(request, cart)
     cart = get_shopping_cart(request)
     ctx = {'cart': cart}

我正在使用 Python 2.7 和 Django 1.5。remove_item 方法的定义有什么问题吗?我已经尝试了几个选项,但无法使其工作任何提示将不胜感激。

编辑:我的 update_shopping_cart 方法是:

def update_shopping_cart(request, cart):
    request.session['cart'] = cart

购物车允许删除项目的视图:

def shopping_cart(request): 
    cart = get_shopping_cart(request)
    if request.method == 'POST':
        cart = get_shopping_cart(request)
        cart.remove_item(cart_item_id)
        update_shopping_cart(request, cart)
        cart = get_shopping_cart(request)   
        ctx = {'cart': cart} 
    render_to_response(...)
4

2 回答 2

0

我认为有两个问题:

  1. 你定了SESSION_SAVE_EVERY_REQUEST=True吗?

  2. 在方法中

    def remove_from_cart(request, cart_item_id):
    
        cart = get_shopping_cart(request)
        cart.remove_item(int(cart_item_id))
        update_shopping_cart(request, cart)
        cart = get_shopping_cart(request)
        ctx = {'cart': cart}
    

您实际上是在获取数据,然后将其更改为然后再次获取旧数据。你为什么要做第二个cart = get_shopping_cart(request)?这可能会覆盖您刚刚所做的更改。

修改代码如下

def remove_from_cart(request, cart_item_id):
    cart = get_shopping_cart(request)
    cart.remove_item(int(cart_item_id))
    update_shopping_cart(request, cart)
    # cart = get_shopping_cart(request)
    ctx = {'cart': cart}

update_shopping_cart(request, cart)并按照格雷格的建议调整你的

def update_shopping_cart(request, cart):
    request.session['cart'] = cart
    request.session.modified = True
于 2013-09-19T12:09:33.827 回答
0

添加这条线有帮助吗?

def update_shopping_cart(request, cart):
    request.session['cart'] = cart
    request.session.modified = True
于 2013-09-18T22:04:25.287 回答