2016-09-18 240 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例外。