更新时UpdateAPIView中的对象的某些操作

时间:2015-05-20 22:27:12

标签: python django django-rest-framework

我的代码:

null

在update方法中,我想用更新的对象做一些操作。怎么做?

2 个答案:

答案 0 :(得分:4)

您可以使用self.get_object()

获取它

查看您正在覆盖的源UpdateView。您可以使用相同的方法来获取对象:

class UpdateModelMixin(object):
    """
    Update a model instance.
    """
    def update(self, request, *args, **kwargs):
        partial = kwargs.pop('partial', False)
        instance = self.get_object()
        serializer = self.get_serializer(instance, data=request.data, partial=partial)
        serializer.is_valid(raise_exception=True)
        self.perform_update(serializer)
        return Response(serializer.data)

    def perform_update(self, serializer):
        serializer.save()

    def partial_update(self, request, *args, **kwargs):
        kwargs['partial'] = True
        return self.update(request, *args, **kwargs)

答案 1 :(得分:4)

您可以使用视图中可用的the perform_update method,并用于在序列化程序上执行更新。它被设计为在需要保存序列化程序(执行更新)时触发的钩子,并且必须调用serializer.save()才能进行更新。

def perform_update(self, serializer):
    # get the object itself
    instance = self.get_object()
    # modify fields during the update
    modified_instance = serializer.save(model_field=new_value)

您可以在序列化程序的save方法中传递应在模型上更新的属性。除非您使用从serializer.save()返回的实例,否则不建议直接与实例交互,该实例将包含模型上的任何更新字段。