5

我正在尝试制作MongoEngine的一个分支,它将允许基于将 True 传递给一个或(a la Django)来自动更新 a 。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 回答