更新时 UpdateAPIView 中对象的一些操作
Some actions with object in UpdateAPIView when update
我的代码:
class CarView(generics.UpdateAPIView):
permission_classes = (IsAdminUser,)
serializer_class = CarSerializer
def get_queryset(self):
return ...
def update(self, request, *args, **kwargs):
# some actions
return super(CarView, self).update(request, *args, **kwargs)
在更新方法中,我想对更新的对象进行一些操作。如何做到这一点?
你可以用 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)
您可以使用 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()
返回的实例,它将包含模型上的任何更新字段。
我的代码:
class CarView(generics.UpdateAPIView):
permission_classes = (IsAdminUser,)
serializer_class = CarSerializer
def get_queryset(self):
return ...
def update(self, request, *args, **kwargs):
# some actions
return super(CarView, self).update(request, *args, **kwargs)
在更新方法中,我想对更新的对象进行一些操作。如何做到这一点?
你可以用 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)
您可以使用 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()
返回的实例,它将包含模型上的任何更新字段。