Не рекомендуется использовать методы, начинающиеся с _
, но Document
имеет защищенный метод document._delta()
. Методы возвращают значения, которые были явно изменены.
class Users(Document):
name = StringField(required=True)
mail = EmailField(required=True, unique=True)
age = IntField(required=True, default=0)
password = StringField(min_length=7, required=True)
@classmethod
def pre_save(cls, sender, document, **kwargs):
updates, removals = document._delta()
if 'password' in updates:
print('new not saved password:', updates['password'])
else:
print('password isn\'t changed')
signals.pre_save.connect(Users.pre_save, sender=Users)
Пример использования:
>> user = Users(name='uname', mail='some@gmail.com', age=2, password='secret0').save()
new not saved password: secret0
>> user.name = 'Name'
>> user.password = 'super-secret'
>> user.save()
new not saved password: super-secret
>> user.name = 'New Name'
>> user.save()
password isn't changed