Django custom save mixin
Я создал пользовательскую функцию сохранения, которая имеет определенную логику в зависимости от того, изменилось ли поле модели Django или нет. В основном, я инициализирую и сохраняю интересующие меня поля в рамках метода models init, а затем проверяю, изменились ли эти поля в рамках функции сохранения models.
Все работает хорошо. Но я хотел бы создать это как миксин. Я не уверен, как лучше передать инициализированные параметры внутри миксина. Посоветуйте что-нибудь?
Это работает нормально:
class Model(models.Model):
field = models.CharField()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__field_stored = self.field
def save(self, *args, **kwargs):
if self.field != self.__field_stored:
# do something
super().save(*args, **kwargs)
Но как миксин? Нижеприведенный вариант, похоже, не работает, вызывая ошибку атрибута:
class Model(SaveMixin, models.Model):
field = models.CharField()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__field_stored = self.field
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
class SaveMixin(models.Model):
field: str
__field_stored: str
class Meta:
abstract = True
def save(self, *args, **kwargs):
if self.field != self.__field_stored:
# do something
super().save(*args, **kwargs)
Для тех, кому интересно... Приведенный выше миксин на самом деле отлично работает. Просто нужно было избежать объявления приватных переменных, таких как __field_stored.