5

True をor ( a la Django )に渡すことに基づいてa の自動更新を可能にするMongoEngineのフォークを作成しようとしています。DateTimeFieldauto_nowauto_now_add

これまでのところ、次のような__init__メソッドに属性を追加しました。DateTimeField

def __init__(self, auto_now=None, auto_now_add=None, **kwargs):
    self.auto_now, self.auto_now_add = auto_now, auto_now_add
    super(DateTimeField, self).__init__(**kwargs)

残念ながら、ドキュメントの作成/保存時にこの値をきれいに入力する方法がわかりません。これまでに見た唯一の解決策は、BaseDocument の保存または検証メソッドにフィールド固有の動作を追加することです...しかし、私はそれが好きではありません。

誰かがより良い方法を知っていますか?

ちなみに、この質問と@ equinoxelのmongoの拡張とdjangoでのこの属性の使用に関するコメントを読んだ後、私はこれを試してみることにしました。

4

1 に答える 1

17

保存前の信号を追加し、保存する前にドキュメントの日付を更新することができます。

class MyDoc(Document):
    name = StringField()
    updated_at = DateTimeField(default=datetime.datetime.now)

    @classmethod
    def pre_save(cls, sender, document, **kwargs):
        document.updated_at = datetime.datetime.now()

signals.pre_save.connect(MyDoc.pre_save, sender=MyDoc)

これに関する主な問題は、電話をかけたupdate場合、または一括更新を行った場合に更新されないことです。例:MyDocs.objects.update(set__name=X)

追加されたチケット:https ://github.com/MongoEngine/mongoengine/issues/110

于 2012-09-03T12:55:05.937 に答える