有没有办法把“addtocart”和“buynow”从同一个表单中分离出来?

2024-04-18 23:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个电子商务网站,现在我有一个一口价按钮,当按下将添加项目到购物车和重定向到“购物车”页面,我想有一个“addtocart”botton将产品添加到卡,但不会重定向下相同的功能。请帮帮我

手推车/模式.py你知道吗

def buy_now(request, slug):
    request.session.set_expiry(120000)

    try:
        the_id = request.session['cart_id'] 
    except:
        new_cart = Cart()
        new_cart.save()
        request.session['cart_id'] = new_cart.id
        the_id = new_cart.id

    cart = Cart.objects.get(id=the_id)
    try :
        product = Product_info.objects.get(slug=slug)
    except Product_info.DoesNotExist:
        pass

    product_var = []
    if request.method == 'POST':
        qty = request.POST['qty']
        for item in request.POST:
            key = item
            val = request.POST[key]
            print(key,val)
            try:
                v = Variation.objects.get(product = product,cat__iexact=key,title__iexact=val)
                product_var.append(v)
            except:
                pass
        cart_item = CartItem.objects.create(cart = cart,product = product)
        if len(product_var) > 0:
            cart_item.variations.add(*product_var)
        cart_item.quantity = qty
        cart_item.save()
        return HttpResponseRedirect(reverse("cart"))

    return HttpResponseRedirect(reverse("cart"))

你知道吗模板.html你知道吗

<form class="form pull-right" method='POST' action="{% url 'buy_now' product.slug %}"> {% csrf_token %}


        {% if product.variation_set.all %}

            {% if product.variation_set.models %}
            <select class = "form-control" name='model'>
                {% for item in product.variation_set.models %}
                    <option value ="{{ item.title }}">{{ item.title }}</option>
                {% endfor %}
            </select>
            {% endif %}

            {% if product.variation_set.sizes %}
            <select class = "form-control" name='size'>
                {% for item in product.variation_set.sizes %}
                    <option value ="{{ item.title }}">{{ item.title }}</option>
                {% endfor %}
            </select>
            {% endif %}

            {% if product.variation_set.colors %}
            <select class = "form-control" name='color'>
                {% for item in product.variation_set.colors %}
                    <option value ="{{ item.title }}">{{ item.title }}</option>
                {% endfor %}
            </select>
            {% endif %}

        {% endif %}

    <input class = 'form-control' name="qty" type="number"/ value="1"/>
    <input class = 'btn btn-danger'type="submit" value="Buynow"/>
</form>

Tags: formidiftitlevaluerequestproductitem
2条回答

您可以在同一视图中使用它,并用name属性分隔按钮。你知道吗

<input class = 'btn btn-danger' type="submit" name="buynow" value="Buynow"/>
<input class = 'btn btn-danger' type="submit" name="addtocart" value="Add to Cart"/>

那么在你看来:

if request.method == 'POST':
   if 'buynow' in request.POST:
      ....
      return HttpResponseRedirect(reverse("cart"))
   elif 'addtocart' in request.POST:
      # code to response add to cart button

你的问题是局部的,但我认为你需要重定向并执行POST操作(包括添加到购物车立即购买)。你知道吗

模板中的按钮

 <input class = 'btn btn-danger'type="submit" value="Buynow"/>

更新

<input class = 'btn btn-primary' type="button" value="Add to Cart" id="id_AddtoCart/>
<input class = 'btn btn-danger' type="submit" value="Buynow"/>

并为添加到购物车功能编写AJAX POST方法

$("#id_AddtoCart").click(function() {
  $.ajax({
  method: "POST",
  url: "/cart/ajax/addtocart/", #example URL, replace with your ajax
  data : $('#cartform').serialize(),


  success: function(result){
    // template update code from the result
    }
})  
});

视图应该如下所示添加到购物车 将表单、模型和文件更改为实际值

def add_to_cart(request):
if request.method == 'POST':
    form = CartItemForm(request.POST)
    if form.is_valid():
        cart = CartItem.add(product=form.cleaned_data['product'], quantity=form.cleaned_data['quantity'])
        data = {"status": "success", "total": cart.qty, "count": cart.count }
        return HttpResponse(json.dumps(data), content_type="application/json")
return HttpResponse(json.dumps({"status": "error"}), content_type="application/json")

然后您可以使用buynow视图从“立即购买”按钮提交表单

对于添加到购物车

def buy_now(request, slug):
request.session.set_expiry(120000)

try:
    the_id = request.session['cart_id'] 
except:
    new_cart = Cart()
    new_cart.save()
    request.session['cart_id'] = new_cart.id
    the_id = new_cart.id

cart = Cart.objects.get(id=the_id)
try :
    product = Product_info.objects.get(slug=slug)
except Product_info.DoesNotExist:
    pass

product_var = []
if request.method == 'POST':
    qty = request.POST['qty']
    for item in request.POST:
        key = item
        val = request.POST[key]
        print(key,val)
        try:
            v = Variation.objects.get(product = product,cat__iexact=key,title__iexact=val)
            product_var.append(v)
        except:
            pass
    cart_item = CartItem.objects.create(cart = cart,product = product)
    if len(product_var) > 0:
        cart_item.variations.add(*product_var)
    cart_item.quantity = qty
    cart_item.save()
    return HttpResponseRedirect(reverse("cart"))

相关问题 更多 >