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

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

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

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

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

Мутабельность и переработка объектов в Python
Мутабельность и переработка объектов в Python
Объекты являются основной конструкцией любого языка ООП, и каждый язык определяет свой собственный синтаксис для их создания, обновления и...
Другой маршрут в Flask Python
Другой маршрут в Flask Python
Flask - это фреймворк, который поддерживает веб-приложения. В этой статье я покажу, как мы можем использовать @app .route в flask, чтобы иметь другую...
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
Проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Допустим, вы используете 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()

Спасибо большое, у меня получилось сделать как вы написали!

Eva 21.11.2022 11:05

Другие вопросы по теме