У меня есть модель 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()
Спасибо большое, у меня получилось сделать как вы написали!