2016-09-18 10 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

Можете ли вы вставить трассировку стека для сервера-получателя - он будет сгенерирован, когда вы получите ответ 500, на терминале, на котором выполняется команда «server server». – algrebe

+0

'tuple' объект не имеет атрибута 'save' –

+0

Я удалил save и отлично работает –

ответ

0

Вы получаете ошибку 500 из-за a.save().

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

Если идентификатор является уникальным, то вы можете использовать CartItem.objects.get - если не найдено, он поднимает CartItem.DoesNotExist исключения.

Смежные вопросы