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