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

この行を追加すると役立ちますか?

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

次の 2 つの問題があると思います。

  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}
    

実際にデータをフェッチしてから、古いデータを再度フェッチするように変更しています。なぜあなたは2番目をするの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 に答える