Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django e-commerce part39 Add, Remove, Update Cart

Add, Remove, Update のCart機能をつけていく

carts/views.py のコードを書いていく

from django.views.generic import View
from django.http import HttpResponseRedirect
from django.shortcuts import render

# Create your views here.



class CartView(View):

    def get(self, request, *args, **kwargs):
        item = request.GET.get("item")
        qty = request.GET.get("qty")
        print (item,qty)
        return HttpResponseRedirect("/")

eccomerce2/urls.py に cartのurlを追記する。

from carts.views import CartView
...

urlpatterns = [
...
    url(r'^cart/$', CartView.as_view(), name='cart'),
]

carts/views.py を修正する。

from django.views.generic import View
from django.http import HttpResponseRedirect
from django.shortcuts import render, get_object_or_404

# Create your views here.

from products.models import Variation
from carts.models import Cart, CartItem

class CartView(View):

# def getは、Viewにもともと備わっているget を上書きしている。
    def get(self, request, *args, **kwargs):
        item_id = request.GET.get("item") # requestのGETメソッドで、itemkeyのvalueをitem_idに代入する。
        if item_id:
            item_instance = get_object_or_404(Variation, id=item_id) #item_instanceは、Variationのitem_idで抽出したinstanceを代入。
            qty = request.GET.get("qty") # requestのGETメソッドで、qtykeyのvalueをqtyに代入
            cart = Cart.objects.all()[0] # Cart のインスタンスの一番最初(つまりCartのpk=1のインスタンスをcartに代入する。
            cart_item = CartItem.objects.get_or_create(cart=cart, item=item_instance)[0] #CartItemに、cart(Cartのinstance)とitemを渡して、CartItemのinstanceを作成する
            cart_item.quantity = qty # cart_item (Cartitemのinstance)のquantity にqtyを代入する。
            cart_item.save() # cart_item(CartItemのinstance)をsaveする。
            print (cart_item)
        return HttpResponseRedirect("/")

delete機能もつけてみる。

class CartView(View):

    def get(self, request, *args, **kwargs):
        item_id = request.GET.get("item")
        delete_item = request.GET.get("delete")
        if item_id:
            item_instance = get_object_or_404(Variation, id=item_id)
            qty = request.GET.get("qty")
            cart = Cart.objects.first()
            cart_item = CartItem.objects.get_or_create(cart=cart, item=item_instance)[0]
            if delete_item:
                cart_item.delete()
            else:
                cart_item.quantity = qty
                cart_item.save()
        return HttpResponseRedirect("/")