2016-06-14 3 views
0

これは私を狂ってしまう。私はDjango-cartonのカートで、eコマースアプリを構築しています。アイテムをカートに追加すると、アイテムのIDをコンテキストから店舗に取得し、顧客がボタンをクリックしてアイテムを追加するとAjax呼び出しとビューに渡すことができます。Ajaxでdjango-cartonからアイテムを取り除く

ボタンを使用してカート内の数量を削除したり編集したりできるようにしたいと思っています。今では、削除と数量編集機能を作成しようとしています。私はアイドルのアイデアを渡す方法を理解していないために立ち往生しています。 idは項目コンテキストオブジェクトにありません。ビューのidをids = request.session['CART']という印刷で取得できますが、現在のIDはありません。ジャンゴ・カートンのドキュメントで

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

例は、この例があり、Javascriptを使用しない:

ビュー:

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

のURL:コンテキスト内の項目は、以下に限定されています

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

私の見解では、カート内のすべてのオブジェクトのIDを取得できます

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

しかし、これは実際に役に立つように見えるしません:

私に次のオブジェクトを与える
cart = Cart(request.session) 
ids = request.session['CART'] 

と。これは私のセッションとの最初の遭遇です。私はここでコードを読んでいますhttps://github.com/lazybird/django-carton/blob/master/carton/cart.pyカート内のアイテムを編集または削除するにはどうしたらいいですか?

答えて

1

あなたはまだAJAX経由で非常に簡単にJavascriptでビューを呼び出すことができます。別段の指定がない限り、ビューはAJAX経由でリクエストが送信されたかどうかは気にしません。だから、簡単に設定できます。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を使用してAjaxのDjangoビュー 'remove'を呼び出します。 Djangoは順番にビューを実行し、セッションからアイテムを削除します。そこから、クライアントがJSを介して表示しているページから項目を削除するコードを含めることができます。カートからアイテムを取り出してショッピングカートビューを再度呼び出すと、そのアイテムは表示されません。 –

関連する問題