Как сравнить старые и новые значения полей в Django serialiazer?

У меня есть модель Django, в которой есть поле "многие ко многим". При добавлении или изменении записи в этой таблице мне нужно выполнить определенные действия. Поскольку таблица содержит поле "многие ко многим", я не могу выполнить проверку на уровне модели с помощью метода сохранения. (Поправьте меня, если я ошибаюсь, но когда я добавляю или удаляю поле "многие ко многим", метод сохранения в главной таблице не вызывается)

Итак, я пытаюсь переопределить метод сохранения на сериализаторе.

def save(self, **kwargs):
    obj = super(PlanningExchangeRateSerializer, self).save(**kwargs)
    return obj

Подскажите, пожалуйста, как определить, изменились ли значения какого-либо поля?

Да, вы можете сохранить или удалить два объекта в одном представлении. Вам нужно переопределить метод, но не на сериализаторе, а на представлении.

Допустим, вы используете ModelViewSet, крючки сохранения и удаления: предоставляемые классами Mixin позволяют переопределить эти методы.

    from rest_framework import viewsets
    from .serializers import MySerializer
    from .models import MyModel


    class MyModelViewSet(viewsets.ModelViewSet):
        serializer = MySerializer
        queryset = MyModel.objects.all()
        
        def perform_create(self, serializer):
            # do whatever you want with your relation fields
            serializer.save()

        def perform_update(self, serializer):
            # do whatever you want with your relation fields
            serializer.save()
        
        def perform_destroy(self, instance):
            # do whatever you want with your relation fields
            instance.delete()
Вернуться на верх