[我使用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()操作时,这些时间字段可以自动更新吗?
将默认值设置为带有括号的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(),而是在需要保存时调用包装函数。