使用auto_now_add在mongoengine中更新DateTime字段
作者:互联网
我正在尝试制作a fork的a 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