def add(request, content_type_id, product_id, form_class=None): """Add a product to the cart POST data should include content_type_id, """ if request.method != 'POST': return HttpResponseNotAllowed(['POST']) else: ctype = get_object_or_404(ContentType, pk=content_type_id) product = get_object_or_404(ctype.model_class(), pk=product_id) if not form_class: form_class = helpers.get_add_form(product) form = form_class(request.POST, product=product) cart = helpers.get_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. \r%s' % form_errors_as_notification(form)) if request.is_ajax(): data = { 'notification': notification, 'cart': cart.as_dict(), 'checkout_url': reverse('cart.views.checkout'), 'delivery_url': reverse('cart.views.delivery'), } if form.is_valid(): data.update({ 'success': True, 'cart': cart.as_dict(), 'product_pk': product.pk, 'product_name': product.name, 'product_quantity_added': form.get_quantity(), 'product_quantity': cart.get(product, form.get_options())['quantity'], 'total_quantity': cart.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)))
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)))