Django sessions Ajax запрос возвращает undefined вместо int значения
По сути, я создаю магазин электронной коммерции. И я хочу использовать Django сессию и ajax запрос для реализации функциональности добавления в корзину в моем приложении, и когда пользователь выбирает количество какого-либо товара, выбранное количество должно быть видно в разделе корзины на панели навигации. Но когда я выбираю некоторое количество и нажимаю кнопку добавить в корзину, значение в разделе корзины меняется с 0 на неопределенное. Когда я декодирую сессию, нет никакой информации о выбранном товаре и его количестве.
Это мой базовый класс Cart:
class Cart():
"""
A base Cart class, providing some default behaviors
that can be inherited or overwited.
"""
def __init__(self, request):
self.session = request.session
cart = self.session.get('session_key')
if 'session_key' not in request.session:
cart = self.session['session_key'] = {}
self.cart = cart
def add(self, product, qty):
"""
Adding and updating the user's cart session data
"""
product_id = product.id
if product_id in self.cart:
self.cart[product_id]['qty'] = qty
else:
self.cart[product_id] = {'price': str(product.price), 'qty': qty}
self.save()
def save(self):
self.session.modified = True
Это вид add_to_cart_view:
def add_to_cart(request):
cart = Cart(request)
if request.POST.get('action') == 'post':
product_id = int(request.POST.get('productid'))
product_qty = int(request.POST.get('productqty'))
product = get_object_or_404(Product, id=product_id)
cart.add(product=product, qty=product_qty)
cartqty = cartqty.__len__()
response = JsonResponse({'qty': cartqty})
return response
Это фронт для добавления в корзину и выбора количества:
<div class="product-page-cart">
<div class="product-quantity">
<input id="product-quantity" type="text" value="1" readonly class="form-control input-sm">
</div>
<button class="btn btn-primary" id="add-button" value="{{ product.id }}" type="submit">Add to
cart</button>
</div>
И фронтенд корзины:
<div class="top-cart-block">
<div class="top-cart-info">
<div id="cart-qty" class="top-cart-info-count">0</div>
</div>
<a type=button href="{% url 'cart:cart summary' %}" class="fa fa-shopping-cart"></a>
А это сценарий запроса:
<script>
$(document).on('click', '#add-button', function (e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '{% url "cart:add to cart" %}',
data: {
productid: $('#add-button').val(),
productqty: $('#product-quantity').val(),
csrfmiddlewaretoken: "{{csrf_token}}",
action: 'post'
},
success: function (json) {
document.getElementById("cart-qty").innerHTML = json.qty
},
error: function (xhr, errmsg, err) {}
});
})
</script>
И вот какой результат я получаю, когда session.get_decoded():

Нет никакой информации о добавленном продукте. Я не могу понять, что я делаю не так, любая помощь будет оценена по достоинству! Заранее спасибо!