Добавьте логику в PATCH на Django Rest Framework - PullRequest
0 голосов
/ 21 апреля 2019

В моем очень простом обучающем приложении я хотел бы задействовать некоторую логику в тот момент, когда модель меняется на «завершенную».В частности, я передаю следующую полезную нагрузку моему представлению:

{
   complete: true
}

, которая выглядит следующим образом:

class TestQuestionViewset(viewsets.ModelViewSet):

    queryset = TestQuestion.objects.all()
    serializer_class = TestQuestionSerializer

Я хотел бы вызвать некоторую сторону логического сервера, которая запускается, как толькоФлаг завершения обновлен.

Могу ли я переопределить метод обновления?Если да, то как я могу это сделать?

1 Ответ

1 голос
/ 21 апреля 2019

попробуйте

class TestQuestionViewset(viewsets.ModelViewSet):
    queryset = TestQuestion.objects.all()
    serializer_class = TestQuestionSerializer

    def update(self, request, *args, **kwargs):
        partial = kwargs.pop('partial', False)
        instance = self.get_object()
        <b>if partial:
            old_complete_value = instance.complete</b>
        serializer = self.get_serializer(instance, data=request.data, partial=partial)
        serializer.is_valid(raise_exception=True)
        self.perform_update(serializer)

        <b>if partial and old_complete_value is False:
            instance.refresh_from_db()
            if instance.complete:
                ...
                # do your logic here</b>

        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)
...