编辑我发现了这个问题,所以当我在基本网站上单击“添加”时,绝对URL只是base/updateItem,但当我转到详细信息页面时,URL是/detail/3/updateItem
我正在创建一个在线商店。在基本URL(127.0.0.1:8000
)上,我可以直接将“推荐”产品添加到购物车。但是当我进入包含该产品详细信息(图片、描述等)的页面并尝试从 there 添加到购物车时,我在127.0.0.1:8000/detail/1/updateItem
处收到404错误。
cart.js(我怀疑错误就在这里):
var updateBtn = document.getElementsByClassName("update-cart")
for (i = 0; i < updateBtn.length; i++){
updateBtn[i].addEventListener('click', function(){
var productId = this.dataset.product
var action = this.dataset.action
console.log(productId,action)
console.log(user)
if (user === "AnonymousUser"){
console.log("user not logged in")
}else{
updateUserOrder(productId, action)
}
})
}
function updateUserOrder(productId, action){
console.log("user created an order")
var url = 'updateItem'
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()
})
}
网址.py
path('updateItem', views.updateItem, name='updateItem'),
path('cart', views.cartDetail, name='cart'),
查看次数.py
def cartDetail(request):
if request.user.is_authenticated:
customer = request.user.customer
order, created = Order.objects.get_or_create(customer=customer, complete=False)
items = order.orderitem_set.all()
else:
order = {'get_cart_total':0,}
items = []
print(items)
context ={
'items':items,
'orders':order,
}
return render(request,'cart.html',context)
def updateItem(request):
data = json.loads(request.body)
productId = data['productId']
action = data['action']
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()
if orderItem.quantity <= 0 or action=='delete':
orderItem.delete()
return JsonResponse("item was added", safe=False)
型号.py:
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, blank=True, null=True)
date_oredred = models.DateField(auto_now_add=True)
complete = models.BooleanField(default=False, null=True, blank=True)
transaction_id = models.CharField(max_length=200, null=True)
def __str__(self):
return str(self.id)
@property
def get_cart_total(self):
items = self.orderitem_set.all()
total = sum([x.get_total for x in items])
return total
class OrderItem(models.Model):
product = models.ForeignKey(Product, on_delete=models.SET_NULL, blank=True, null=True)
order = models.ForeignKey(Order, on_delete=models.SET_NULL, blank=True, null=True)
quantity = models.IntegerField(default=0, null=True, blank=True)
date_added = models.DateTimeField(auto_now_add=True)
@property
def get_total(self):
if self.product.pricePromo is None:
total = self.product.priceNormal * self.quantity
else:
total = self.product.pricePromo * self.quantity
return total
如果我缺少任何代码,请告诉我。
3条答案
按热度按时间gg0vcinb1#
在
urls.py
中,将/
添加到updateItem
的末尾urls.py
并在函数updateUserOrder中将变量url更改为/updateItem/
ql3eal8s2#
在cart.js中,我已将url更改为绝对路径,它可以正常工作
lmvvr0a83#
绝对路径的含义如下&这是404错误的解决方案.. var url = '/updateItem/'