Проблема при попытке выполнить ajax-запрос с помощью django

у меня возникла проблема при выполнении ajax запроса к серверу для добавления товара в карточку с использованием django и jquery,

URL здесь:

path('add_to_cart/', cartView.add_to_cart, name="add_to_cart")

вот код jquery:

$(document).ready(function () {
    
    $('.addToCartBtn').click(function (e) {
    console.log("jjjj")
     e.preventDefault();
     var product_id = $(this).closest('.product_data').find('.prod_id').val()
     var product_qty = $(this).closest('.product_data').find('.qty-input').val()
     var token = $('input[name=csrfmiddlewaretoken]').val()
console.log(token)
        console.log(product_id)
        console.log(product_qty)
    $.ajax({
        method: 'POST',
        url: 'add_to_cart',
        data: {
            'product_id' : product_id,
            'product_qty' : product_qty,
            csrfmiddlewaretoken: token

        },
        success: function(res) {
            console.log(res.status)
            alertify.success(res.status)
        }
    })
})

});

и вот код представления django:

from django.http.response import JsonResponse
from django.shortcuts import render, redirect
from django.contrib import messages
from store.models import Product, Cart


def add_to_cart(request):
    if request.method == 'POST':
        if request.user.is_authenticated:
            prod_id = request.POST.get('product_id')
            product_check = Product.objects.get(id=prod_id)
            if product_check:
                if Cart.objects.filter(user=request.user.id, product_id=prod_id):
                    return JsonResponse({'status': 'Product Already in the Cart'})
                else:
                    prod_qty = int(request.POST.get('product_qty'))
                    if product_check.quantity >= prod_qty:
                        Cart.objects.create(user=request.user, product_id=prod_id, product_quantity=prod_qty)
                        return JsonResponse({'status': 'Product Added Successfully'})
                    else:
                        return JsonResponse({'status': "only" + str(product_check.quantity) + "is Available"})
            else:
                return JsonResponse({'status': 'No Such Product Found'})
        else:
            return JsonResponse({'status': 'Login To Continue'})
    return redirect('/')

а вот view.html, когда кнопка добавления в карточку существует:

вот сообщение об ошибке, когда я нажимаю на кнопку, чтобы сделать ajax вызов:

ValueError: The view store.views.product_details didn't return an HttpResponse object. It returned None instead.
[03/May/2022 21:11:11] "POST /category/mobile/add_to_cart HTTP/1.1" 500 65574

Я думаю, что ошибка возвращает представление None вместо этого, поскольку вы не перенаправили его внутри if условия, где вы обрабатываете POST запрос.

Перенаправьте его внутрь условия if.

Попробуйте это:

def add_to_cart(request):
    if request.method == 'POST':
        if request.user.is_authenticated:
            prod_id = request.POST.get('product_id')
            product_check = Product.objects.get(id=prod_id)
            if product_check:
                if Cart.objects.filter(user=request.user.id, product_id=prod_id):
                    return JsonResponse({'status': 'Product Already in the Cart'})
                else:
                    prod_qty = int(request.POST.get('product_qty'))
                    if product_check.quantity >= prod_qty:
                        Cart.objects.create(user=request.user, product_id=prod_id, product_quantity=prod_qty)
                        return JsonResponse({'status': 'Product Added Successfully'})
                    else:
                        return JsonResponse({'status': "only" + str(product_check.quantity) + "is Available"})
            else:
                return JsonResponse({'status': 'No Such Product Found'})
        else:
            return JsonResponse({'status': 'Login To Continue'})
        return redirect('/')
Вернуться на верх