def detail(request, product_id): product = Product.objects.get(pk=product_id) if request.method == 'POST': form = CartItemForm(request.POST) if form.is_valid(): user = User.objects.get(username=request.user) try: cart = Cart.objects.get(user=user) except Cart.DoesNotExist: cart = Cart() cart.user = user cart.save() item = CartItem() item.product = product item.quantity = form.cleaned_data['quantity'] item.save() cart.item.add(item) return redirect('products:index') else: form = CartItemForm() return render(request, 'products/detail.html', { 'form': form, 'product': product })
def add_to_cart(request): """ function that takes a POST request and adds a product instance to the current customer's shopping cart """ postdata = request.POST.copy() # get product slug from post data, return blank if empty product_slug = postdata.get('product_slug', '') # get quantity added, return 1 if empty quantity = postdata.get('quantity', 1) # fetch the product or return a missing page error p = get_object_or_404(Product, slug=product_slug) # get products in cart cart_products = get_cart_items(request) product_in_cart = False # check to see if item is already in cart for cart_item in cart_products: if cart_item.product.id == p.id: # update the quantity if found cart_item.augment_quantity(quantity) product_in_cart = True if not product_in_cart: # create and save a new cart item ci = CartItem() ci.product = p ci.quantity = quantity ci.cart_id = _cart_id(request) ci.save()
def post(self, request, order_id, *args, **kwargs): """ 재주문을 하는 API """ try: order_obj = Order.objects.get(id=order_id) except Order.DoesNotExist: return JsonResponse(status=HTTPStatus.NOT_FOUND, data={'message': '주문 id를 찾을 수 없습니다.'}) if not order_obj.cart_id: return JsonResponse(status=HTTPStatus.NOT_FOUND, data={'message': '해당 주문은 요식이로 구매하였습니다.'}) user = self.request.user new_cart = Cart.objects.create(user=user) menu_id_list = list( CartItem.objects.filter(cart_id=order_obj.cart_id).values_list( 'menu__id', flat=True)) cart_item_list = [ CartItem(menu_id=menu_id, cart=new_cart, quantity=1) for menu_id in menu_id_list ] CartItem.objects.bulk_create(cart_item_list) return JsonResponse(status=HTTPStatus.OK, data={'message': "재주문할 새로운 주문표를 생성하였습니다."})
def update_cart_items(request): if request.method == 'GET': return HttpResponse('no access') elif request.method == 'POST': cart_manager = CartManager(request) import ast dict_request_body = ast.literal_eval(request.body.decode("UTF-8")) product_url = dict_request_body['product'] try: product_id_with_slashes = re.search(r'\/[0-9]{1,6}\/', product_url).group() product_id = re.search(r'[0-9]{1,6}', product_id_with_slashes).group() product_id = int(product_id) product = Product.objects.get(pk = product_id) try: cart_item_being_updated = CartItem.objects.get(product = product, cart = cart_manager.cart) cart_item_being_updated.quantity += 1 cart_item_being_updated.save() except: # if we get here means cart item doesnt exist so we make a new one with quanitity of 1 new_cart_item = CartItem(cart = cart_manager.cart, product = product) new_cart_item.save() except: HttpResponse('someone is messing with the hidden html input fields D:') return HttpResponse('updated cart items')
def add(request): if request.GET: cart = '' product = '' is_exist = False try: cart = Cart.objects.get(id=request.session.get("cart")) product = Product.objects.get(id=int(request.GET['pid'])) except: raise Http404 item = CartItem() item.product = product item.cart = cart item.quantity = int(request.GET['quantity']) item.color = Color.objects.get(id=int(request.GET['color'])) item.size = Size.objects.get(id=int(request.GET['size'])) for i in CartItem.objects.filter(cart=cart).filter(product=product): if i.is_same_spec(item): i.quantity += item.quantity i.save() break else: item.save() return HttpResponseRedirect("/cart/")
def post(self, request, *args, **kwargs): cart = self.get_object() product_id = int(request.POST.get("item")) qty = int(request.POST.get("qty", 1)) if product_id is not None: product = get_object_or_404(Product, pk=product_id) message = request.POST.get("request_message", "") print("Request msg: " + str(message)) if qty < 1: data = { 'success': False, 'errorMsg': 'Quantity cannot be less than 1', 'errorCode': '400' } else: cart_item = CartItem(cart=cart, product=product) cart_item.quantity = qty cart_item.intention = message cart_item.save() data = {'success': True} else: data = { 'success': False, 'errorMsg': 'Item id not provided', 'errorCode': '400' } return JsonResponse(data=data)
def post(self, request): cart_id = request.session.get("cart_id") data = json.loads(request.body) items = data['items'] if not items: print("List empty") else: if cart_id == None: cart = Cart() cart.user = User.objects.get(id=data['user']) cart.save() cart_id = cart.id request.session['cart_id'] = cart_id else: cart = Cart.objects.get(id=cart_id) for item in items: cart_item = CartItem() cart_item.cart = cart cart_item.item = get_object_or_404(Product.objects.all(),pk=item['itemid']) cart_item.quantity = item['quantity'] cart_item.save() cart.items.add(cart_item) cart.save() # data = serializers.serialize('json', [cart,]) # struct = json.loads(data) # data = json.dumps(struct[0]) data = CartSerializer(Cart.objects.get(id=cart.id)).data # data2 = CartItemSerializer(cart.cartitem_set.all()).data # print (d) return Response({'data':data})
def cart_detail(request): cart = Cart(request) for item in cart: item['update_quantity_form'] = CartItem(initial={ 'quantity': item['quantity'], 'update': True }) return render(request, 'cart/detail.html', {'cart': cart})
def add(self, product, quantity=1): # Add a product to the cart or update its quantity. if self.cart_item.filter(product=product): self._update_quantity_cart(product, quantity) else: cart_item = CartItem(cart=self.cart, product=product, price=product.retail_price, quantity=quantity) cart_item.save()
def cart_add(request, product_id): cart = Cart(request) product = get_object_or_404(Product, id=product_id) form = CartItem(request.POST) if form.is_valid(): cd = form.cleaned_data cart.add(product=product, quantity=cd['quantity'], update_quantity=cd['update']) return redirect('cart:cart_detail')
def setUp(self): self.client = Client() home_url = reverse('catalog_home') self.checkout_url = reverse('checkout') self.client.get(home_url) # need to create customer with a shopping cart first self.item = CartItem() product = Product.active.all()[0] self.item.product = product self.item.cart_id = self.client.session[cart.CART_ID_SESSION_KEY] self.item.quantity = 1 self.item.save()
def add(self, goodsid, colorid, sizeid, count, *args, **kwargs): # 获取购物项的唯一标示 key = self.__get_key(goodsid, colorid, sizeid) # session {'cart':{key1:item}} # session('cart',[{key1:cartitem,key2:cartitem}]) if key in self.session[self.cart_name]: self.update(goodsid, colorid, sizeid, count, *args, **kwargs) else: self.session[self.cart_name][key] = CartItem(goodsid=goodsid, colorid=colorid, sizeid=sizeid, count=count)
def add_to_cart(request, **kwargs): product = Product.objects.filter(id=kwargs.get('pk')).first() cart = Cart.objects.get(user=request.user) if product.id not in cart.cartitem_set.all().values_list( 'product', flat=True) and product.displayed and product.in_stock: new_cart_item = CartItem(cart=cart, product=product) new_cart_item.save() print('ITEM ADDED TO CART') else: print('ITEM ALREADY IN CART') return redirect(request.META.get('HTTP_REFERER', 'shop-home'))
def signup_user(request): if request.user.is_authenticated: return redirect("/") if request.method == "POST": try: user = User.objects.create_user(request.POST['userName'], request.POST['email'], request.POST['password']) user.save() cart = CartItem(user=user, items={}) cart.save() login(request, user) return redirect("/") except IntegrityError: return render(request, "signup.html", {"error": "User name Already exist try different name"}) return render(request, "signup.html")
def add_orderitem_to_cart(orderitem, request): quantity = orderitem.quantity p = get_object_or_404(Product, slug=orderitem.product.slug) cart_products = get_cart_items(request) product_in_cart = False for cart_item in cart_products: if cart_item.product.id == p.id: cart_item.augment_quantity(quantity) product_in_cart = True if not product_in_cart: ci = CartItem() ci.product = p ci.quantity = quantity ci.cart_id = _cart_id(request) ci.save()
def add_to_cart(request): postdata = request.POST.copy() product_slug = postdata.get('product_slug', '') print('add_to_cart') quantity = postdata.get('quantity', 1) p = get_object_or_404(Product, slug=product_slug) cart_products = get_cart_items(request) product_in_cart = False for cart_item in cart_products: if cart_item.product.id == p.id: cart_item.augment_quantity(quantity) product_in_cart = True if not product_in_cart: ci = CartItem() ci.product = p ci.quantity = quantity ci.cart_id = _cart_id(request) ci.save()
def dispatch(self, request, *args, **kwargs): items = request.POST.getlist('item', None) user = request.user r = Favorite.objects.filter(user=user, item__in=items) if 'remove' in request.POST: r.delete() if 'add2cart' in request.POST: cart = get_current_cart(request) for item_id in items: item = Item.objects.get(id=item_id) try: cart_item = CartItem.objects.filter(cart=cart, item=item)[0] cart_item.quantity += 1 except IndexError: cart_item = CartItem(cart=cart, item=item, quantity=1) cart_item.save() r.delete() return super(ActionView, self).dispatch(request, *args, **kwargs)
def add_to_cart(request): postdata = request.POST.copy() product_id = postdata.get('product_id') quantity = postdata.get('quantity', 1) size_id = postdata.get('size_id', 1) p = get_object_or_404(Flower, id=product_id) s = get_object_or_404(Size, id=size_id) products = get_cart_items(request) in_cart = False for item in products: if item.product.id != p.id and item.size.id != s.id: item.augment_quantity(quantity) in_cart = True if not in_cart: item = CartItem() item.product = p item.quantity = quantity item.cart_id = _cart_id(request) item.size = s item.save()
def post(self, request, *args, **kwargs): """ If request is POST, redirect to cart list page """ cart = self.get_object() product_id = int(request.POST.get("item")) qty = int(request.POST.get("qty", 1)) if product_id is not None: product = get_object_or_404(Product, pk=product_id) message = request.POST.get("request_message", "") # print("Request msg: " + str(message)) cart_item = CartItem(cart=cart, product=product) cart_item.quantity = qty cart_item.intention = message if "request_attachment" in request.FILES: cart_item.attachment = request.FILES["request_attachment"] cart_item.save() return HttpResponseRedirect(reverse('cart:list'))
def add(request): if request.method == "POST" and request.user.is_authenticated: profile = Profile.objects.filter(user=request.user)[0] cart = list( filter(lambda x: x.is_active, Cart.objects.filter(profile=profile))) cartItem = CartItem() if len(cart) > 0: cartItem.cart = cart[0] else: cart = Cart() cart.profile = profile cart.total = 0.0 cart.save() cartItem.cart = cart cartItem.quantity = int(request.POST.get('id_quantity')) cartItem.material = request.POST.get('id_material') cartItem.good = Good.objects.get(id=request.POST.get('id_good_id')) cartItem.save() return redirect('/good/{0}'.format(request.POST.get('id_good_id'))) else: return HttpResponseBadRequest()
def add_to_cart(request): postdata = request.POST.copy() # get product slug from post data, return blank if empty product_slug = postdata.get("product_slug", "") # get quantity added, return 1 if empty quantity = postdata.get("quantity", 1) # fetch the product or return a missing page error p = get_object_or_404(Product, slug=product_slug) # get products in cart cart_products = get_cart_items(request) product_in_cart = False # check to see if item is already in cart for cart_item in cart_products: if cart_item.product.id == p.id: # update the quantity if found cart_item.augment_quantity(quantity) product_in_cart = True if not product_in_cart: # create and save a new cart item ci = CartItem() ci.product = p ci.quantity = quantity ci.cart_id = _cart_id(request) ci.save()
def cart(request): if request.method == "POST": if request.POST['menu_item'] == 'Pizza': form = PizzaForm(request.POST) if form.is_valid(): form = form.cleaned_data # Get the form data to build a Pizza and CartItem menu = "Pizza" style = form['style'] size = form['size'] is_special = False if 'is_special' in request.POST: is_special = True num_toppings = form['num_toppings'] topping_list = [] for topping in form['toppings']: topping_list.append(str(topping)) toppings = ", ".join(topping_list) # Lookup price if is_special: # numtoppings doesn't matter menu_pizza = Pizza.objects.get(style=style, size=size, is_special=is_special) else: menu_pizza = Pizza.objects.get(style=style, size=size, num_toppings=num_toppings, is_special=is_special) price = menu_pizza.price print(price) # Create the Cart Item order = CartItem(menu=menu, size=size, style=style, additional=toppings, is_special=is_special, user_id=request.user.id, price=price) order.save() elif request.POST['menu_item'] == 'Sub': form = SubForm(request.POST) if form.is_valid(): form = form.cleaned_data menu = 'Sub' ingredients = form['ingredients'] size = form['size'] extras_list = [] added_cost = Decimal(0.00) for extra in form['extras']: extras_list.append(str(extra)) added_cost += extra.added_cost extras = ", ".join(extras_list) # Lookup price menu_sub = Sub.objects.get(ingredients=ingredients, size=size) price = menu_sub.price + Decimal(added_cost) # Create the Cart Item order = CartItem(menu=menu, size=size, style=ingredients, additional=extras, is_special=False, user_id=request.user.id, price=price) order.save() redirect('index') elif request.POST['menu_item'] == 'Pasta': form = PastaForm(request.POST) if form.is_valid(): form = form.cleaned_data menu = 'Pasta' style = form['style'] # Lookup price menu_pasta = Pasta.objects.get(style=style) price = menu_pasta.price # Create the Cart Item order = CartItem(menu=menu, style=style, user_id=request.user.id, price=price) order.save() elif request.POST['menu_item'] == 'Salad': form = SaladForm(request.POST) if form.is_valid(): form = form.cleaned_data menu = 'Salad' style = form['style'] # Lookup price menu_salad = Salad.objects.get(style=style) price = menu_salad.price # Create the Cart Item order = CartItem(menu=menu, style=style, user_id=request.user.id, price=price) order.save() elif request.POST['menu_item'] == 'DinnerPlatter': form = DinnerPlatterForm(request.POST) if form.is_valid(): form = form.cleaned_data menu = 'DinnerPlatter' style = form['style'] size = form['size'] # Lookup price menu_dinner_platter = DinnerPlatter.objects.get(style=style, size=size) price = menu_dinner_platter.price # Create the Cart Item order = CartItem(menu=menu, style=style, size=size, user_id=request.user.id, price=price) order.save() else: print("Post Error") redirect('index') cart_items = get_cart_items(request) if cart_items: total_cost = Decimal( cart_items.aggregate(Sum('price'))['price__sum']) else: total_cost = 0 context = { 'cart_items': cart_items, 'num_cart_items': cart_items.count(), 'total_cost': total_cost } return render(request, 'cart/cart.html', context) else: # Display Shopping Cart for GET request cart_items = get_cart_items(request) if cart_items: total_cost = Decimal( cart_items.aggregate(Sum('price'))['price__sum']) else: total_cost = 0 context = { 'cart_items': cart_items, 'num_cart_items': cart_items.count(), 'total_cost': total_cost } return render(request, 'cart/cart.html', context)
def signin(request): next_url = request.GET.get('next') if request.user.is_authenticated: return redirect("shop:home") if request.method == 'POST': form = SignInForm(request.POST) if form.is_valid(): # check authentication email = form.cleaned_data.get('email') password = form.cleaned_data.get('password') if User.objects.filter(email=email): user = User.objects.filter(email=email)[0] # check password matched = check_password(password, user.password) if matched: # valid user # take cart from session and persist # it in db if not Cart.objects.filter(user=user): cart = Cart(user=user) cart.save() else: cart = Cart.objects.get(user=user) session_cart = request.session.get( settings.CART_SESSION_ID) if session_cart: for item_id, item in session_cart.items(): product = Product.objects.get(id=int(item_id)) if CartItem.objects.filter(product=product, cart=cart): item_in_cart = CartItem.objects.filter( product=product, cart=cart)[0] # then the product already # exists # so increase the quantity item_in_cart.price = float(item['price']) item_in_cart.quantity += int(item['quantity']) item_in_cart.save() else: # if item is not present in the cart, then add it new_item = CartItem(product=product, price=float(item['price']), quantity=int( item['quantity']), cart=cart) new_item.save() # destroy all items from the session del request.session[settings.CART_SESSION_ID] # login login(request, user) messages.add_message(request, messages.SUCCESS, "Signed In successfully!") return redirect(next_url) if next_url else redirect( "shop:home") else: messages.add_message(request, messages.ERROR, "Email or Password doesn't match!") else: messages.add_message(request, messages.ERROR, "Email or Password doesn't match!") else: form = SignInForm() return render(request, 'auth/signin.html', {'form': form})