burakatalan
burakatalan

Reputation: 11

ajax request.method= 'POST' is not working in django

I have a problem,Django my ajax post is not working. when i look at the console quantity is not undefined. But my request.post is not working.

<form  method="POST">
              {% csrf_token %}
             
           <ul>
            <li>
              <div class="form-group quantity-box">
                <label class="control-label">Quantity</label>
                <input
                  class="form-control"
                  id="quantity"
                  value="0"
                  min="0"
                  max="20"
                  type="number"
                />
              </div>
            </li>
          </ul>
         
          <div class="price-box-bar">
            <div class="cart-and-bay-btn">
              <a class="btn hvr-hover" data-fancybox-close="" href="#"
                >Buy New</a>
              <button type = "submit">
                <a class="btn hvr-hover" data-fancybox-close="" id= "qtyButton" data-fancybox-close="" href="{% url 'addCart' %}">Add to cart</a>
                </button>
                 </form>

my js script

$('#qtyButton').click(function(e){
    e.preventDefault();

    var qty = $('#quantity').val();
    var id = {{product.id}};

    $.ajax({
    type: "POST",
    url: "{% url 'addCart' %}",
    dataType: 'json',
    data: { 
      "quantity":qty,
      "product_id":{{product.id}},
      
     }
  });
});

my view.py file

def addCart(request):
    
    if request.method == 'POST':
        post = request.POST 
        quantity = post.get('quantity')
        id = post.get('product_id')
        item = Product.objects.get(id=id)
        Cart.objects.get_or_create(user_id=request.user, product_id=item, quantity=quantity)
    else:
         return render(request, 'cart.html')    
    
    return redirect(request.META.get("HTTP_REFERER", "/"))

I tried so many things. But none of them is working. What should i do ?

Upvotes: 1

Views: 30

Answers (1)

Mahammadhusain kadiwala
Mahammadhusain kadiwala

Reputation: 3635

You need to pass Jsonresponse() response instead of render() response like this

views.py

from django.http import JsonResponse

def CreditSaveView(request):
    if request.method == 'POST':
        creditform = CreditForm(request.POST)
        if creditform.is_valid():
            amt = request.POST['amt']
            tag = request.POST['tag']
            crs = request.POST['csrfmiddlewaretoken']
            CreditModel(amt=amt,tag=tag).save()
            return JsonResponse({'status':'done'}

script

<script>
    document.getElementById("creditbtn").addEventListener("click", function () {
        let id_amt = document.getElementById('id_amt').value;
        let id_tag = document.getElementById('id_tag').value;
        let crs = document.getElementsByName('csrfmiddlewaretoken')[0].value
        my_data = { csrfmiddlewaretoken: crs, amt: id_amt, tag: id_tag };

        console.log(my_data)

        $.ajax({
            url: "/creditsave/",
            method: "POST",
            data: my_data,
            // dataType: "json",
            success: function (data) {
                if (data.status == 'done') {
                    // document.getElementById('creditform').reset()
                    console.log(data)
                    document.getElementsByTagName('form')[1].reset()
                }
            }
        });
    });
</script>

Upvotes: 1

Related Questions