2016-12-19 10 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()のいずれかのサウンドを適切に使用する必要があります。

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'が呼び出されたと思うし、私は私のコードのドキュメントがあるたびに実行する必要はありません。ここでは、信号にイベントハンドラをアタッチするdifferent waysはそのうちの一つですがあります。それが作成されたときに保存されます。 –

+0

@RohitKhatri ah、gotcha..then 'pre_init()'が適切かもしれません。 – alecxe

+0

ありがとう、それは働いた。 :-) –

関連する問題