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(): decoded session output

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

Вернуться на верх