2015-05-08 35 views
0

我試圖創建一個刪除/取消用戶購物車的按鈕(在用戶端)。在django中創建'刪除購物車'按鈕

我可以這樣做嗎?

views.py

def cancel_cart(request, id): 

    try: 
     the_id = request.session['cart_id'] 
     cart = Cart.objects.get(id=the_id) 
    except: 
     the_id = None 

    cart.delete() 
    messages.success(request, "You have cancelled your order.") 
    return HttpResponseRedirect('profile.html') 
+0

你的代碼有幾個問題。如果'the_id'是None,那麼'cart'變量就是'None',它調用'delete'方法。 之後,'HttpResponseRedirect'參數應該是一個url,而不是一個模板。除了'profile.html'是你的網址。 –

回答

1

我想你也許想要去的東西,如:

from django.core.urlresolvers import reverse 

def cancel_cart(request): 
    cart_id = request.session.get('cart_id') 
    if cart_id: 
     try: # code defensively, even against yourself 
      cart = Cart.objects.get(id=cart_id) 
      cart.delete() 
      messages.success(request, "You have cancelled your order.") 
     except Cart.DoesNotExist: 
      pass 
    return HttpResponseRedirect(reverse('your_app:some_url_name')) 

這樣一來,如果cart_id關鍵是存在於會話刪除只嘗試,因爲.get()默認返回None。您可以通過在檢索cart實例時添加嘗試/除外處理來防止錯誤,以防在會話中存在不存在的ID。

不知道爲什麼你需要通過ID來檢索,因爲你從會話中得到它。您可以將其設置爲可選參數,以刪除特定購物車對象,如果它不在會話中,我猜。

相關問題