Кажется, он поддерживается из коробки. В браузере API перейдите на страницу описания модели, внизу рядом с вкладкой HTML Form
нажмите Raw data
, удалите все из строки JSON, кроме поля ID и поля, которое вы хотите изменить, и нажмите PATCH
, Выполняется частичное обновление PATCH
.
Я использую djangorestframework==3.2.4
, и мне не приходилось ничего делать с моими наборами представлений и сериализаторами, чтобы включить это.
В этом exampe мы обновляем поле bool status_field
модели, и я использую jquery 2.2.1. Добавьте в <head>
следующее:
<script src="{% static 'my_app/jquery.min.js' %}"></script>
<script>
$(document).ready(function(){
var chk_status_field = $('#status_field');
chk_status_field.click(function(){
$.ajax({url: "{% url 'model-detail' your_rendering_context.id %}",
type: 'PATCH', timeout: 3000, data: { status_field: this.checked }
})
.fail(function(){
alert('Error updating this model instance.');
chk_status_field.prop('checked', !chk_status_field.prop('checked'));
});
});
});
</script>
Затем в <form>
:
<input type="checkbox" id="status_field" {% if your_rendering_context.status_field %}
checked {% endif %} >
я решил разрешить изменение флажка, а затем вернул его в поле случай отказа. Но вы можете заменить click
на mousedown
, чтобы обновить значение флажка только после того, как вызов AJAX преуспел. Я думаю, что это приведет к тому, что люди будут многократно нажимать флажок для медленных соединений.