我最近开始使用mongoengine,我无法谷歌模型中是否有beforeSave()、beforeUpdate()等方法。
默认情况下,所有实例都需要填写一些字段,而不是静态数据。例如,如果您这样做:
class Subject(DynamicDocument):
meta = { 'collection': 'subjects' }
created_at = IntField(default=int(time.time()))
那么 created_at 将始终包含相同的时间戳,它会在导入类时立即初始化,并在创建实例时保持不变。如果你这样做:
class Subject(DynamicDocument):
meta = { 'collection': 'subjects' }
created_at = IntField()
def save(self):
self.created_at = int(time.time())
self.save() # самого себя вызываем - чушь собачья
而且即使你在my_save()放下价值观和最后打电话的课堂上做了一些条件,self.save()它仍然是,第一,拐杖,第二,它必须到处改变,save()而my_save()不是根据风水。mongoengine 中是否有可能在模型中设置一些方法,这些方法将在创建之前、保存之前、更新之前调用?
还有另一种方法clean()几乎可以满足您的需求:
class Subject(DynamicDocument):
meta = { 'collection': 'subjects' }
created_at = IntField()
def clean(self):
self.created_at = int(time.time())
但是:更新呢?如果例如我updated_at需要放下完全相同的东西?直接在代码中检查是否created_at存在,如果存在,如果小于当前,则创建updated_at?不知怎么的歪了。通过 mongoengine 更优雅地期望它。
这是原则上解决问题的方法