2016-06-14 84 views
0

這讓我瘋狂。我正在建立一個電子商務應用,購物車在Django-carton。當我將商品添加到購物車時,我可以將商品的ID從上下文中獲取到商店中,並在客戶通過點擊按鈕添加商品時將其傳遞到我的Ajax調用和視圖中。用Ajax從django-carton中刪除項目

我希望客戶能夠使用按鈕刪除和編輯購物車中的數量,並且現在正在嘗試創建我的刪除和編輯數量功能。我卡住了,因爲我不明白如何在Ajax中傳遞視圖的id。該id不在項目上下文對象中。我可以通過打印ids = request.session['CART']獲得視圖中的ID,但它沒有當前的ID。在上下文中的項目僅限於以下情況:

self.product = product 
self.quantity = int(quantity) 
self.price = Decimal(str(price)) 

Django的紙箱的文檔中的例子有這個例子,它不使用JavaScript:

觀點:

def remove(request): 
    cart = Cart(request.session) 
    product = Product.objects.get(id=request.GET.get('id')) 
    cart.remove(product) 
    return HttpResponse("Removed") 

網址:

u`rl(r'^remove/$', 'remove', name='shopping-cart-remove'),` 

在我看來,我可以得到購物車中所有物品的ID與

cart = Cart(request.session) 
ids = request.session['CART'] 

這給了我下面的對象:

{u'meal_pk': 15, u'price': u'5', u'quantity': 39} 

但這實際上並沒有顯得有幫助。這是我第一次見面。我一直在閱讀代碼https://github.com/lazybird/django-carton/blob/master/carton/cart.py如何編輯或刪除購物車中的物品?

回答

1

您仍然可以通過AJAX輕鬆地通過AJAX調用remove視圖;除非另有規定,否則該視圖不關心該請求是否通過AJAX提交。所以,我們可以很容易地設置它w/JQuery

所以,在顯示購物車,例如模板:

{% load carton_tags %} 
{% get_cart as cart %} 

<script type="text/javascript" src="path/to/jquery.js">/script> 

{% for item in cart.items %} 
    <a onclick='AjaxRemove("{% url 'shopping-cart-remove' %}?id={{ item.product.id }}")'>Remove this item</a> 
{% endfor %} 

<script type="text/javascript"> 
    function AjaxRemove(remove_url) { 
     $.ajax({ 
      url: remove_url, 
      success: function(response) {alert(response);}, 
      error: function() {alert("Couldn't remove item");} 
     }) 
</script> 

將刪除該項目,如果AJAX請求成功響應給出一個警告。

您可以進一步自定義視圖響應使用request.is_ajax()不同響應AJAX請求:

def remove(request): 
    cart = Cart(request.session) 
    product = Product.objects.get(id=request.GET.get('id')) 
    cart.remove(product) 
    if request.is_ajax(): 
     # do something, respond differently 
     return HttpResponse("Removed (via AJAX)") 
    return HttpResponseRedirect(reverse('shopping-cart-show')) 
+0

原諒可能是愚蠢的問題 - 與會話我可以在JS編輯,並在所有不使用我的意見?我很困惑這是如何工作的。 – fstopzero

+0

只能通過後端訪問會話,因此您必須創建視圖/端點來更新或檢索會話變量。以上情況發生了什麼:單擊項目的刪除按鈕時,使用JQuery對Django視圖'remove'進行Ajax調用。 Django反過來執行視圖,從會話中刪除項目。從那裏,你可以包含代碼來刪除客戶端通過JS查看的頁面上的項目。如果您從購物車中移除某件商品,然後再次調用購物車視圖,則該商品不會顯示。 –