Django js JQuery Basket_adding

Guys, please help, I am new to Django, JS. Anyway, I'm creating a shopping cart. I added JQuery, the display was fine (added). Then I created a back: I created a model ProductInBasket, in views.py made a function. But, now when I click on the "Add to cart" button it shows me this: enter image description here

That is, after each refresh of the page, +1 is added. Here... The site, in general, does not show. I do not know, what is the problem, such strange stuttering... Help, please)

Here is the code: JS:

$(document).ready(function() {
var form = $('#form-buying-product');
console.log(form);
form.on('submit', function(e){
    e.preventDefault();
    console.log('123');
    var nmb = $('#number').val();
    console.log(nmb);
    var submit_btn = $('#submit_btn')
    var product_id = submit_btn.data("product_id")
    var product_name = submit_btn.data("name")
    var product_price = submit_btn.data("price")
    console.log(product_id);
    console.log(product_name);
    console.log(product_price);

    var data = {};
    data.product_id = product_id;
    data.nmb = nmb;
    var csrf_token = $('#form-buying-product [name="csrfmiddlewaretoken"]').val();
    data["csrfmiddlewaretoken"] = csrf_token;

    var url = form.attr("action");

   console.log(data);
    $.ajax({
        url: url,
        type: 'POST',
        data: data,
        cache: true,
        success: function (data) {
            console.log("OK");
        error: function(){
            console.log("error")
        }
            })

    $('.basket-items ul').append('<li>'+product_name+', ' + nmb + 'шт. ' + 'по ' + product_price + 'грн  ' +
    '<button style="background-color: #ff0000; color: white; z-index: 99999 !important;" type="button" class="delete-item btn close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>' +'</li>');




});

function showingBasket() {
    $('.basket-items').removeClass('hidden');
}

$('.basket-container').on('click, hover', function(e){
    e.preventDefault();
    showingBasket;
})

$('.basket-container').mouseover(function(){
    showingBasket();
})

$('.basket-container').mouseout(function(){
    showingBasket();
});

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

});

views.py:

def product(request, product_id):
product = Product.objects.get(id=product_id)

session_key = request.session.session_key
if not session_key:
    request.session.cycle_key()

print(request.session.session_key)

return render(request, 'product/detail.html', locals())


def basket_adding(request):
   return_dict = {}
   session_key = request.session.session_key
   print(request.POST)
   data = request.POST
   product_id = data.get("product_id")
   nmb = data.get("nmb")


   new_product = ProductInBasket.objects.create(session_key=session_key, 
   product_id=product_id, nmb=nmb)
   products_total_nmb = ProductInBasket.objects.filter(session_key=session_key, 
   is_active=True).count()
   return_dict["products_total_nmb"] = products_total_nmb

return JsonResponse(return_dict)

detail.html (product information):

  {% extends "shop/base.html" %}
  {% load static %}
  {% block title %}
  {% if category %}{{ category.title }}{% else %}Products{% endif %}
  {% endblock %}
  {% block content %}
{{ product.category }}

{{ product.name }}

{{ product.description|linebreaks }}

Price: {{product.price }} ₴ {% csrf_token %} To cart {% endblock %}

models.py:

class ProductInBasket(models.Model):
session_key = models.CharField(max_length=128, blank=True, null=True, default=None)
order = models.ForeignKey(Order, on_delete=models.CASCADE, blank=True, null=True, default=None)
product = models.ForeignKey(Product,on_delete=models.CASCADE, blank=True, null=True, default=None)
nmb = models.IntegerField(null=True, blank=True, default=0)
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)

def __str__(self):
    return "%s" % self.product.name

class Meta:
    verbose_name = 'Товар в корзине'
    verbose_name_plural = 'Товары в корзине'

def __str__(self):
    return "%s" % self.name

class Meta:
    verbose_name = "Товар в корзине"
    verbose_name_plural = "Товары в корзине"

P.S.: In the admin area here: enter image description here

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