使用auto_now_add更新mongoengine中的DateTime字段

时间:2012-09-01 17:52:53

标签: python fork mongoengine

我正在尝试a fork MongoEngine a la Django允许根据将{True}传递给DateTimeFieldauto_now来自动更新auto_now_add({3}} this question)。

到目前为止,我已将属性添加到__init__的{​​{1}}方法,如下所示:

DateTimeField

不幸的是,我无法弄清楚如何在创建/保存文档时干净地填充此值。我到目前为止看到的唯一解决方案是在BaseDocument的save或validate方法中添加字段特定的行为......但我不喜欢它。

有谁知道更好的方法?

顺便说一下:我在阅读equinoxel和@ {{3}}关于在django中扩展mongo并习惯这个属性的评论之后,试着去看看。

1 个答案:

答案 0 :(得分:11)

您可以在保存之前添加预保存信号并更新文档日期。

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