繁体   English   中英

使用Ajax更新特定对象中单个字段的正确方法

[英]The right way to use Ajax to Update a Single field in a specific Object

是否可以使用Ajax更新特定对象中的单个字段? 我有一个包含大量记录的postgres表,我想使用一个jQuery 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

谢谢!

是的,您可以使用PATCH HTTP方法执行此操作,在REST术语中将其称为部分更新 默认情况下,它已在DRF中实现,因此您不必重写任何方法。 这与PUT是完全更新相反,PUT要求您将所有必填字段添加到请求中,除非yuou覆盖默认行为

我认为您可以以最简单的形式使用Django RestFramework库提供的RetrieveUpdateAPIView通用视图

这将公开以下api:

GETReturn对象

PATCHUpdate对象数据(按惯例partially Update

PUTUpdate对象数据

参考: 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM