2016-12-19 3 views
0

Как я могу выполнить некоторый код только в том случае, если документ создан в mongoengine, а не при обновлении.Выполнение кода перед созданием документа в mongoengine

class Account(Document): 
    name = StringField(max_length=80, default=None) 
    username = StringField(max_length=60, required=True) 
    created_at = DateTimeField(default=datetime.now(), required=True) 
    updated_at = DateTimeField(default=datetime.now(), required=True) 

    meta = { 
     'collection': 'accounts' 
    } 

Теперь я хочу генерировать случайное имя пользователя и назначить его в поле имени пользователя до создания документа.

Любая помощь приветствуется. Благодарю.

ответ

1

Вы должны использовать один из MongoEngine's signals - pre_save() звучит как подходящий. Есть different ways присоединить обработчик события к сигналу, вот один из них:

from mongoengine import signals 

class Account(Document): 
    # ... 

    @classmethod 
    def pre_save(cls, sender, document, **kwargs): 
     document.username = "random username" 

signals.pre_save.connect(Account.pre_save, sender=Account) 
+0

Я думаю, что 'pre_save' вызывается при обновлении, а также, и я не хочу, чтобы выполнить свой код каждый раз, когда документ сохранен, только один раз, когда он создан. –

+0

@RohitKhatri ah, gotcha..then 'pre_init()' может быть хорошо подходит. – alecxe

+0

Спасибо, это сработало. :-) –

Смежные вопросы