我正在关注django电子商务书中的购物车示例,当涉及从购物车中删除商品时,我遇到了一个问题,我无法从会话中删除单个商品。
这是我的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)
views.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(...)
答案 0 :(得分:0)
添加此行有帮助吗?
def update_shopping_cart(request, cart):
request.session['cart'] = cart
request.session.modified = True
答案 1 :(得分:0)
我认为有两个问题:
您是否设置了SESSION_SAVE_EVERY_REQUEST=True
?
方法
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}
并根据Greg的建议调整您的update_shopping_cart(request, cart)
def update_shopping_cart(request, cart):
request.session['cart'] = cart
request.session.modified = True