Почему PATCH метода HTTP запускает метод модели save ()? - PullRequest
0 голосов
/ 28 ноября 2018

Я использую serializers.ModelSerializer и viewsets.ModelViewSet Django REST Framework в своем REST API.

Во время тестирования я обнаружил, что PATCH из HTTP method работает под управлением модели save().

Я знаю, PATCH для обновления данных. Почему DRF использует save() вместо update()?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Поскольку обновление применяется к набору запросов, а не к одному экземпляру, и обновление может изменить другие поля, предоставленные клиентами, что затрудняет прогнозирование.

0 голосов
/ 28 ноября 2018

В основном это происходит здесь , внутри 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.

...