为什么 HTTP 方法的 PATCH 运行 模型 save() 方法?

Why does the PATCH of the HTTP method run the model save() method?

我在我的 REST API.

中使用 Django REST Framework 的 serializers.ModelSerializerviewsets.ModelViewSet

我测试的时候发现HTTP methodPATCH是运行型号save()

我知道PATCH是用来更新数据的,为什么DRF用save()而不是update()

基本上它发生在 here,在 UpdateModelMixin 内。代码是:

class UpdateModelMixin(object):
    ...
    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)  # <-- Partial Update
        serializer.is_valid(raise_exception=True)
        self.perform_update(serializer)

        if getattr(instance, '_prefetched_objects_cache', None):
            # If 'prefetch_related' has been applied to a queryset, we need to
            # forcibly invalidate the prefetch cache on the instance.
            instance._prefetched_objects_cache = {}

        return Response(serializer.data)

    def perform_update(self, serializer):
         serializer.save() # <-- here

并且 UpdateModelMixin 后来被 ModelViewSet 子类化。

基本上它使用 Serializer 的 Partial 更新功能。

因为更新适用于查询集而不是单个实例,并且更新可能会更改客户端提供的更多字段,这使得事情难以预测。