如何在MongoEngine中自动更新更新时间?

问题描述 投票:0回答:1

[我使用flask-mongoEngine创建了一些集合。例如,例如作者,书籍,公司。相同的部分是他们有2个名为

的字段
created_at = db.DateTimeField(required=True, default=utcnow())
updated_at = db.DateTimeField(required=True, default=utcnow())

[每次创建新文档时,我都需要更新created_at和updated_at的值,而且在更新文档时,我也需要更新updated_at的值。有什么好方法,当我执行save()操作时,这些时间字段可以自动更新吗?

mongodb mongoengine flask-mongoengine
1个回答
0
投票

将默认值设置为带有括号的utcnow()会使Python在创建类时而不是在创建使用该类的新对象时执行utcnow函数。相反,您应该将默认设置为不带()的函数。这会将函数作为对象本身传递,而不是立即调用它,并且当从此类创建新对象时,函数将执行。

此外,Python文档recommend using datetime.now over utcnow。与此相关,您的示例应如下所示:

import datetime

class Example(mongoengine.Document):
    created_at = db.DateTimeField(required=True, default=datetime.datetime.now)
    updated_at = db.DateTimeField(required=True, default=datetime.datetime.now)

关于在每次调用save()时更新updated_at属性,您可以为save()创建包装函数,该函数将把updated_at设置为datetime.now(),然后保存。然后,无需调用save(),而是在需要保存时调用包装函数。

© www.soinside.com 2019 - 2024. All rights reserved.