Правильный способ использования Ajax для обновления одного поля в определенном объекте - PullRequest
0 голосов
/ 13 декабря 2018

Можно ли использовать Ajax для обновления отдельного поля в определенном объекте? У меня есть таблица postgres с большим количеством записей, я хочу использовать Jjery Ajax-запрос для обновления одного поля вконкретный объект в этой таблице.Можно ли это сделать без замены или повторной публикации всей записи?.

Я хочу это (выдает ошибку 400 неверных запросов):

$.ajax({
    type: "POST",
    url: '/api/MyEndPoint/',
    data: {
        id: Specific_Record,
        Field_To_Update: New_Value, 
    }, 
    success: function(data){
        console.log( 'success, server says '+data);  
    }
});

Вместо этого (что работает):

$.ajax({
    type: "POST",
    url: '/api/MyEndPoint/',
    data: {
        id: Specific_Record,
        Field_To_Update: New_Value, 
        Field1: SameAsBefore, 
        Field2: SameAsBefore,  
        Field3: SameAsBefore,  
        ...  
        Field16: SameAsBefore, 
    }, 
    success: function(data){
        console.log( 'success, server says '+data);  
    }
});

* Примечание: я использую Django и могу легко сделать это обновление в views.py, но я хочу использовать Javascript, чтобы избежать обновления страницы.

Поскольку я такжеиспользуя Django Rest Framework, было бы лучше для меня создать новую конечную точку, специфичную для поля, которое я хочу обновить?пример: /api/DB_Table/Object_id/Field_to_Update

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Я думаю, что вы можете в простейшей форме использовать общее представление RetrieveUpdateAPIView, предоставляемое библиотекой Django RestFramework

Это будет отображать следующие apis:

GET: Return object

PATCH: Update данные объекта (partially, в соответствии с соглашением)

PUT: Update данные объекта

Ссылка: https://www.django -rest-framework.org / api-guide / generic-views / # retrieveupdateapiview

Если вы также хотите support deleting объект, то вы можете использовать RetrieveUpdateDestroyAPIView, это будет поддерживатьDELETE для удаления объекта

Ссылка: https://www.django -rest-framework.org / api-guide / generic-views / # retrieveupdatedestroyapiview

0 голосов
/ 14 декабря 2018

Да, вы можете сделать это, используя HTTP-метод PATCH, и он называется частичное обновление в терминологии REST.Он уже реализован по умолчанию в DRF, поэтому вам не нужно переопределять какой-либо метод для этого.Это противоположно PUT, который является полным обновлением и потребует добавления всех необходимых полей в запрос, если только вы не переопределите поведение по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...