Django - Программный доступ к свойству класса модели (getattr бросает ошибку атрибута)

Я переопределяю метод сохранения модели, чтобы я мог регистрировать изменения, сделанные в определенных полях:

class Model(models.Model):
    name = ...
    price = ...
    ...

    __original_name = None
    __original_price = None

    def save(self, force_insert=False, force_update=False, *args, **kwargs):

        for field in [
            'name',
            'price',
        ]:
            print(self.__original_name) # works
            original_value = getattr(self, f"__original_{field}") # throws Attribute Error
            # other logic ...

        self.__original_name = self.name
        self.__original_price = self.price

        super(Model, self).save(force_insert, force_update, *args, **kwargs)

Выброшена ошибка:

AttributeError: 'Model' object has no attribute '__original_name'

Метод работает правильно, если я не перебираю поля в цикле и обращаюсь к каждому полю независимо с помощью self.__original_field, но я пытаюсь рефакторить код, чтобы можно было легко начать отслеживать другие поля по мере необходимости.

Есть ли другой встроенный метод, который я могу использовать для программного доступа к значению? (не могу использовать self[f"__original_{field}"], потому что он не является подзаписываемым)

Вернуться на верх