使用AJAX put方法更改模型值-Django-rest-framework

时间:2019-05-23 13:29:15

标签: jquery ajax django-rest-framework

我必须在var input_val = span.siblings('input').val();中将模型的值从旧值更改并保存为新值。用户单击图标以编辑值,然后再次单击图标接受此值。我使用带有PUT方法的AJAX请求来传递带有编辑ID的该值。现在我得到PUT http://127.0.0.1:8000/edit/2/ 400 (Bad Request)。您是否有更好的选择来将值从行传递/更改为现有模型?

views.py

@api_view(['DELETE', 'PUT'])
def contact_detail(request, pk, format=None):

    try:
        contact = Contact.objects.get(pk=pk)
    except Contact.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method == 'DELETE':
        contact.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

    elif request.method == 'PUT':
        serializer = ContactSerializer(contact, data=request.data)
        if serializer.is_valid():
            serializer.save()
            # messages.success(request, f"Pomyślnie edytowano kontakt")
            return redirect('address_book:contact_list')
        else:
            # messages.error(request, "Coś poszło nie tak.")
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

edit-contact.js

$('.clickable-check-icon').on('click',function(e){
        e.preventDefault();

        var span = $(this);
        var input = span.siblings('input');
        var input_val = span.siblings('input').val();
        var edit_id = span.closest('tr').data('contact-id');
        // var td_id = span.closest('td').attr('id');

        input.prop('disabled', true);
        span.siblings(".clickable-edit-icon").show();
        span.hide();

        $.ajax({
            url: 'edit/'+edit_id+'/',
            method: 'PUT',
            data: JSON.stringify(input_val),
            contentType:'application/json',
            dataType: 'json',
            error: function(result){},
            success: function(result) {
            }
        });

    });

这个问题是我的问题的延续:Wait until user click a span then trigger AJAX request

我感谢每一个建议。

0 个答案:

没有答案