Сохранение исходного значения атрибута в Django

Основной текст заметки

Иногда требуется знать предыдущее значение атрибута модели. Но Django не хранит эти значения - приходится делать самостоятельно.

Программный код
class CustomModel(models.Model)
...
    # оригинальное значение атрибута
    _original_field = None
    def __init__(self, *args, **kwargs):
        super(CustomModel, self).__init__(*args, **kwargs)
        # сохраняем исходное значение атрибута
        self._original_field = self.field

    def save(self, force_insert=False, force_update=False, *args, **kwargs):
        # проверяем изменилось ли значение атрибута
        if self.field!= self._original_field :
            # атрибут field изменился - ваша супер-логика
        super(CustomModel, self).save(force_insert, force_update, *args, **kwargs)

        # а этот шаг зависит от вашей логики 
        self._original_field = self.field

Заметка написана: 25.05.2020

Теги заметки: Django, Python