其他分享
首页 > 其他分享> > 使用auto_now_add在mongoengine中更新DateTime字段

使用auto_now_add在mongoengine中更新DateTime字段

作者:互联网

我正在尝试制作a forka fork,它允许基于将True传递给auto_now或auto_now_add(a la Django)来自动更新DateTimeField.

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

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的保存或验证方法中添加字段特定的行为……但我不喜欢它.

有谁知道更好的方法?

顺便说一句:我在阅读this question和@ equinoxel关于扩展mongo并在django中习惯这个属性的评论后,我已经开始了.

解决方法:

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

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)

这方面的主要问题是,如果您调用更新或者进行批量更新,它们将不会更新,例如:MyDocs.objects.update(set__name = X)

加票:https://github.com/MongoEngine/mongoengine/issues/110

标签:python,fork,mongoengine
来源: https://codeday.me/bug/20190716/1480324.html