Проблема при попытке выполнить 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('/')