def update(request): """Update cart quantities.""" if request.method != 'POST': return HttpResponseNotAllowed('GET not allowed; POST is required.') else: cart = Cart(request) for item in cart: index = 'quantity-%s' % unicode(item.formindex) if index in request.POST: try: quantity = int(request.POST[index]) cart.update(item.product, quantity, item['options']) except ValueError: pass notification = (messages.SUCCESS, 'Cart updated. <a href="%s">View cart</a>' % (reverse(checkout))) if request.is_ajax(): response = HttpResponse() data = { 'cart': cart.as_dict(), 'notification': notification, } response.write(simplejson.dumps(data)) return response else: messages.add_message(request, *notification) return HttpResponseRedirect(request.POST.get('redirect_to', reverse(checkout)))
def add(request, form_class=AddToCartForm): """Add a product to the cart POST data should include content_type_id, """ if request.method != 'POST': return HttpResponseNotAllowed('GET not allowed; POST is required.') else: form = form_class(request.POST) cart = Cart(request) if form.is_valid(): form.add(request) notification = (messages.SUCCESS, 'Product was added to your cart. <a href="%s">View cart</a>' % (reverse(checkout))) else: notification = (messages.ERROR, 'Could not add product to cart. %s' % form_errors_as_notification(form)) if request.is_ajax(): data = { 'notification': notification, 'cart': cart.as_dict(), 'checkout_url': reverse('cart.views.checkout'), 'cart_url': reverse('cart.views.index'), } if form.is_valid(): data.update({ 'success': True, 'product_pk': form.get_product().pk, 'product_name': form.get_product().name, 'product_quantity_added': form.get_quantity(), 'product_quantity': cart.get(form.get_product(), form.get_options())['quantity'], }) return HttpResponse(simplejson.dumps(data), mimetype='application/json') else: messages.add_message(request, *notification) if form.is_valid(): return HttpResponseRedirect(request.POST.get('redirect_to', reverse(checkout))) else: return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse(checkout)))