Search code examples
pythonjquerypycharmmodels

jQuery wrong data attribute


I'm working on my first Django project (IDE: PyCharm, OS: Win10). There is a problem with .js. I renamed variable called 'nmb' to 'quantity' in the script. This variable was created for counting products in user's cart. Then I've got an error that ItemInCart model gets an 'undefined' quantity instead of some countable value. It happens because only on 8000 port jQuery still seeks for 'nmb' not for data attr name 'quantity'. Running my app on any other port, like 8023 everything works well.

JS

$ (document).ready(function () {
   var form = $('#form_buy_item');
   console.log(form);
   form.on('submit', function (e) {

       e.preventDefault();

       var quantity = $('#quantity').val();
       console.log(quantity);
       var csrf_token;
       var submit_btn = $('#submit_btn');
       var item_id = submit_btn.data('item_id');
       var item_name = submit_btn.data('item_name');
       var item_price = submit_btn.data('item_price');
       console.log(item_name, item_id);

       var data = {};

       data.item_id = item_id;
       data.item_name = item_name;
       data.quantity = quantity;
       csrf_token = $('#form_buy_item [name = "csrfmiddlewaretoken"]').val();
       data["csrfmiddlewaretoken"] = csrf_token;

       // use action attribute for multi-language support
       var url = form.attr("action");

       console.log(data);

       $.ajax({
           url: url,
           type: 'POST',
           data: data,
           cache: true,

           success: [ function (data) {
               console.log("OK");
               console.log(data.items_total_count);
               if (data.items_total_count){
                   $('#cart_total_quantity').text('data.items_total_count')
               }

           } ],
           error: function() {
                    console.log("error")
               }
       });



       $('.cart-items ul').append('<li>'+item_name +', ' + quantity + ' item(s), '  + item_price + '$ per item '+
           '<a class="delete-item" href=""> x <a>' + '</li>')
   });



   function displayCartItems(){
       $('.cart-items').toggleClass('hidden');
   }

    $('.cart-container').on('click, hover', function (e) {
        e.preventDefault();
        displayCartItems();

    });

    $('.cart-container').mouseover('click, hover', function (e) {
        e.preventDefault();
        displayCartItems();
    });
    $('.cart-container').mouseout('click, hover', function (e) {
        e.preventDefault();
        displayCartItems();
    });

    $(document).click('click', 'delete-item', function(e) {
        e.preventDefault();
        $(this).closest('li').removeAttr()
    });

});     

Model

class ItemInCart(models.Model):
    session_key = models.CharField(max_length=128, null=True, blank=True, default=None)
    order = models.ForeignKey(Order, on_delete=models.SET_DEFAULT, blank=True, null=True, default=None)
    item = models.ForeignKey(Item, on_delete=models.SET_DEFAULT, blank=True, null=True, default=None)
    quantity = models.IntegerField(default=1)
    price_per_item = models.DecimalField(max_digits=10, decimal_places=2, default=0)
    total_price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
    is_active = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)

    class Meta:
        verbose_name = 'Item in cart'
        verbose_name_plural = 'Items in cart'

    def save(self, *args, **kwargs):
        price_per_item = self.item.price
        self.price_per_item = price_per_item
        self.total_price = int(self.quantity) * self.price_per_item

        super(ItemInCart, self).save(*args, **kwargs)

Views

def cart_add(request):
    return_dictionary = dict()
    session_key = request.session.session_key
    print(request.POST)
    data = request.POST
    item_id = data.get('item_id')
    quantity = data.get('quantity')
    # is_delete = data.get('is_delete')

    new_item = ItemInCart.objects.create(session_key=session_key, item_id=item_id, quantity=quantity)

    items_total_count = ItemInCart.objects.filter(session_key=session_key, is_active=True).count()

    return_dictionary['items_total_count'] = items_total_count

    print(request.POST)
    return JsonResponse(return_dictionary)

This is happened on 8000, 8001

enter image description here

8024 is fine

enter image description here


Solution

  • Please clear browser history then run the application.