2016-09-18 30 views
0

私は500のサーバーレスポンスを取得し続けますが、item_idを送信しますが、関数をロードできないため、respのステータスとメッセージを取得できません。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

'tuple'オブジェクトに属性 'save'がありません –

+0

保存を削除しても完全に動作します –

答えて

0

あなたが原因a.save()の500エラーを取得しています。

CartItem.objects.filter(id=item_id).delete()docsに従ってタプルを返す -

削除方法、便利に、)(削除命名されます。このメソッドは、オブジェクトをただちに削除し、削除されたオブジェクト の数やオブジェクトタイプごとの欠失の数と辞書

>>> e.delete() # from the docs 
(1, {'weblog.Entry': 1}) 

ですから、その上でsaveを呼び出すことはできませんが返されます 。 idが一意である場合

代替実装が

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'}) 

だろう、あなたはCartItem.objects.getを使用することができます - 見つからない場合は、それがCartItem.DoesNotExist例外が発生します。

関連する問題