0

私は単純な電子商取引サイトに取り組んでいます (起業家のためのコーディングコースに従っています)。カートのビューがあります(下)。セッションに問題があります。アイテムをカートに追加するたびに、そのセッションで同じカートにすべて追加する必要があるのに、新しいカートに追加されます。私は Django が初めてで、ここでどこが間違っているのかわかりません。追加された各アイテムを同じカートに入れる方法についてのアドバイスは大歓迎です.

# imports

def add_to_cart(request):
    try:
        cart_id = request.session('cart_id')
    except Exception:
        # If cart_id doesn't exist, make one
        cart = Cart()
        cart.save()
        request.session['cart_id'] = cart.id
        cart_id = cart.id

    # If adding to the cart, need to POST
    if request.method == "POST":
        # Get data from the form
        form = ProductQtyForm(request.POST)
        if form.is_valid():
            product_slug = form.cleaned_data['slug']
            product_quantity = form.cleaned_data['quantity']
            # Use that info to set up new objects in our cart
            try:
                product = Product.objects.get(slug=product_slug)
            except Exception:
                product = None
            try:
                cart = Cart.objects.get(id=cart_id)
            except Exception:
                cart = None
            new_cart = CartItem(cart=cart, product=product, quantity=product_quantity)
            new_cart.save()
            print new_cart.product, new_cart.quantity, new_cart.cart # Check items are being added to the cart
            return HttpResponseRedirect('/products/')
        # If form is not valid, go to contact page
        return HttpResponseRedirect('/contact/')
    else:
        raise Http404
4

1 に答える 1

2

ジェネリックをキャッチしないで、探してExceptionいる特定のものをキャッチしてください。KeyError

ここでは、TypeErrorbecause cart_id = request.session('cart_id')should use []and notが得られます()。したがって、句を入力しているためexcept、意図しないときに新しいカートを作成することになります。

やったほうがいい:

try:
    cart_id = request.session['cart_id'] # Fix this
except KeyError:                         # Fix that
    # If cart_id doesn't exist, make one
    cart = Cart()
    cart.save()
    request.session['cart_id'] = cart.id
    cart_id = cart.id

とにかく、カートが存在しないのは本当に「例外的な」状態ですか?おそらくそうではありません。だからあなたはしたいかもしれません:

cart_id = request.session.get('cart_id')

if cart_id is None:
    cart = Cart.objects.create()
    cart_id = cart.id
    request.session['cart_id'] = cart.id

おそらく、カートが実際に存在することも確認する必要があります。

carts = Cart.objects.filter(pk=request.session.get('cart_id'))  
# I'm not fully sure None is accepted here, use -1 if it's not. 

if carts:
    cart = carts[0]
else:
    cart = Cart.objects.create()
    request.session['cart_id'] = cart.id

そして、それから使用cartしてください。

于 2013-08-21T17:53:13.057 に答える