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}"]
, потому что он не является подзаписываемым)