有什么方法可以判断ndb中的_pre_put_hook是否第一次保存?

时间:2013-05-16 20:49:27

标签: python google-app-engine app-engine-ndb

我想在模型创建上运行一些东西,但不是在模型更新上运行。我可以通过添加一个属性来做到这一点,但我想知道是否有某种内置功能可以专门针对创建和更新进行定位。

2 个答案:

答案 0 :(得分:6)

任何已存储的实体都有一个密钥,因此检查该密钥会告诉您它是新的还是正在更新。

https://developers.google.com/appengine/docs/python/ndb/keyclass

答案 1 :(得分:4)

您需要检查_pre_put_hook中模型键中是否存在ID。

如果查看ndb Model类的源代码,您可以看到在调用_pre_put_hook之前实际创建了一个键并将其分配给模型实例,但该键没有ID。 _pre_put_hook中的此代码应该有效:

def _pre_put_hook(self):
    if self.key.id() is None:
        print 'model has not been saved'
    else:
        print 'model has been saved'