在django rest framework 3.0+中,如何在更新时检查对象差异?

cal*_*a-c 5 django django-rest-framework

如果用户更改了对象,如何检查保存?即如果引入了与原始数据库对象的任何差异.在它可能之前pre_save()(参见django rest框架中的post_save中的对象更改),但现在已经替换为perform_update,它不再包含两个对象(原始和已修改)以进行比较.

Kev*_*own 8

在Django REST Framework 3中,pre_save被替换为perform_update,仅将序列化器作为参数(而不是对象本身).

您可以访问已传递到使用请求验证的数据.validated_data属性上串行.这是推荐的替代品.object,应该允许您确定差异.

def perform_update(self, serializer):
    original_object = self.get_object() # or (the private attribute) serializer.instance
    changes = serializer.validated_data

    serializer.save(attr=changed_value) # pass arguments into `save` to override changes
Run Code Online (Sandbox Code Playgroud)