2016-09-18 117 views
0

我不断收到500服务器响应,它发送item_id但无法加载函数,所以我无法获取响应状态和消息。jquery 500(内部服务器错误)

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

您可以粘贴runserver的堆栈跟踪 - 它会在运行'runserver'命令的终端上得到500响应时生成。 – algrebe

+0

“元组”对象没有“保存”属性 –

+0

我删除了保存并且完美地运行 –

回答

0

你得到,因为a.save() 500错误。

CartItem.objects.filter(id=item_id).delete()返回一个元组作为每docs -

该删除方法,适宜地,被命名为删除()。这种方法 立即删除对象,并返回已删除对象 的数量和字典中删除的每个对象类型

>>> 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例外。