我一直收到500服务器响应,它发送item_id但无法加载功能,因此我无法获得resp状态和消息。
var remove_item_request = function(item_id){
$.post(
'/remove/item/',
{
item_id:item_id,
},
function(resp){
console.log(resp)
if(resp.status==200){
alert('Removed!!');
document.location = 'buy-requests/show/';
}
else{
alert(resp.message);
}
}
);
}
这是我的view.py:
def remove_item(request):
if request.method == "POST":
item_id = int(request.POST.get('item_id', None))
if item_id is None:
return HttpResponse(status=400)
else:
a = CartItem.objects.filter(id=item_id).delete()
a.save()
return JsonResponse({'status': 200, 'message': 'item Removed'})
else:
return JsonResponse({'status': 400, 'message': 'invalid request type'})
答案 0 :(得分:0)
由于a.save()
,您收到了500错误。
CartItem.objects.filter(id=item_id).delete()
根据docs -
删除方法很方便地命名为delete()。这种方法 立即删除对象并返回对象数 删除了一个字典,其中包含每个对象类型的删除次数
>>> e.delete() # from the docs
(1, {'weblog.Entry': 1})
所以你不能打电话保存。
另一种实施方式是
def remove_item(request):
if request.method != "POST":
return JsonResponse({'status': 400, 'message': 'invalid request type'})
item_id = int(request.POST.get('item_id', None))
if item_id is None:
return HttpResponse(status=400)
# get the item out
item = CartItem.objects.filter(id=item_id).first()
if item is None:
# it does not exist ? return the same status code
return HttpResponse(status=400)
item.delete()
# if you really want to cross check
# num_deletes, num_deletes_per_object_type = item.delete()
# num_deletes should be greater than zero, and in your case == 1
return JsonResponse({'status': 200, 'message': 'item removed'})
如果ID是唯一的,那么您可以使用CartItem.objects.get
- 如果找不到,则会引发CartItem.DoesNotExist
例外。