POST http://127.0.0.1:8000/update_item/ 500 - Django
У меня вопрос о django. На моем сайте электронной коммерции я пытаюсь добавить функцию добавления в корзину. Мой код работает, и я могу добавить в корзину с AnonymousUser. Но когда я пытаюсь добавить в корзину, когда я вошел в систему под учетной записью, я получаю эту ошибку: ошибка: Внутренняя ошибка сервера Итак, он добавляется в корзину, но location.reload не работает. Мне нужно перезагрузиться вручную.
В чем проблема? Пожалуйста, помогите!
Вот мой файл javascript, который называется cart.js cart.js
var updateBtns = document.getElementsByClassName('update-cart')
for (i = 0; i < updateBtns.length; i++) {
updateBtns[i].addEventListener('click', function(){
var productId = this.dataset.product
var action = this.dataset.action
console.log('productId:', productId, 'Action:', action)
console.log('USER:', user)
if (user == 'AnonymousUser'){
addCookieItem(productId, action)
}else{
updateUserOrder(productId, action)
}
})
}
function updateUserOrder(productId, action){
console.log('User is authenticated, sending data...')
var url = '/update_item/'
fetch(url, {
method:'POST',
headers:{
'Content-Type':'application/json',
'X-CSRFToken':csrftoken,
},
body:JSON.stringify({'productId':productId, 'action':action})
})
.then((response) => {
return response.json()
})
.then((data) => {
location.reload()
})
}
function addCookieItem(productId, action){
console.log('User is not authenticated')
if (action == 'add'){
if (cart[productId] == undefined){
cart[productId] = {'quantity':1}
}else{
cart[productId]['quantity'] += 1
}
}
if (action == 'remove'){
cart[productId]['quantity'] -= 1
if (cart[productId]['quantity'] <= 0){
console.log('Item should be deleted')
delete cart[productId]
}
}
if (action == 'delete'){
cart[productId]['quantity'] == 0
delete cart[productId]
}
console.log('CART:', cart)
document.cookie ='cart=' + JSON.stringify(cart) + ";domain=;path=/"
location.reload()
}
views.py
def updateItem(request):
data = json.loads(request.body)
productId = data['productId']
action = data['action']
print('Action:', action)
print('Product:', productId)
customer = request.user.customer
product = Product.objects.get(id=productId)
order, created = Order.objects.get_or_create(customer=customer, complete=False)
orderItem, creat ed = OrderItem.objects.get_or_create(order=order, product=product)
if action == 'add':
orderItem.quantity = (orderItem.quantity + 1)
elif action == 'remove':
orderItem.quantity = (orderItem.quantity - 1)
orderItem.save()
urls.py
path('update_item/', views.updateItem, name='update_item')
Ваша функция просмотра не отвечает!!!
Также обратите внимание на слово creat ed, которое должно быть created и creat ed!
def updateItem(request):
data = json.loads(request.body)
productId = data['productId']
action = data['action']
print('Action:', action)
print('Product:', productId)
customer = request.user.customer
product = Product.objects.get(id=productId)
order, created = Order.objects.get_or_create(customer=customer, complete=False)
orderItem, created = OrderItem.objects.get_or_create(order=order, product=product)
if action == 'add':
orderItem.quantity = (orderItem.quantity + 1)
elif action == 'remove':
orderItem.quantity = (orderItem.quantity - 1)
orderItem.save()
return JsonResponse({'status':'ok'})
Также лучше, чтобы вы контролировали свою функцию с помощью блока try execpt