Как сравнить старые и новые значения полей в 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()