我的GAE应用程序上有一些模型,我在其中一些应用程序上覆盖了put()
。当我使用这些实体列表调用db.put()
时,是否可以保证每个实体上的覆盖put()
都会被调用?
我现在看到的是,实体只是在没有被调用的情况下得到保存。有没有什么好方法可以确保在每次保存之前完成任务,甚至是批次?
答案 0 :(得分:3)
没有。您也需要monkeypatch db.put()
。有关这方面的一个很好的例子,请查看Nick Johnson在Pre- and post- put hooks for Datastore models上发表的优秀博文。
答案 1 :(得分:0)
您可以尝试以下方式:
class SomeModel(db.Model):
aprop = db.IntegerProperty()
def _populate_internal_entity(self, *args, **kwargs):
logging.warn('about to Put() SomeModel: %r', self)
return super(SomeModel, self)._populate_internal_entity(*args, **kwargs)
然而,可能有更好的方法。如果您尝试设置某些属性,则应检查自定义属性类。如果您尝试进行日志记录或缓存,则应调查数据存储区挂钩。