使用auto_now_add更新mongoengine中的DateTime字段

tut*_*uju 3 python fork mongoengine

我正在尝试制作一个MongoEngine 的分支,它允许DateTimeField基于将True传递给一个auto_nowauto_now_add(一个Django)来自动更新.

到目前为止,我已经将属性添加到类似的__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)
Run Code Online (Sandbox Code Playgroud)

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

有谁知道更好的方法?

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

Ros*_*oss 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)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 它需要安装眨眼库。`pip 安装眨眼器` [pypi/blinker](https://pypi.python.org/pypi/blinker) (2认同)