有选择地触发模型_post_put_hook

时间:2015-10-14 08:51:46

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

我在ndb模型上设置了_post_put_hook,用于更新某些搜索索引。这简化了数据导入和原子更新。 但我有一个案例,我想更新该模型的某些属性而不触发索引操作。

所以我正在寻找:

  1. 某种可以与_post_put_hook一起使用的标志,或者:
  2. 一种了解put()中哪些模型属性/值已更改的方法,因此我可以添加更新索引的条件。
  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

一种方法是设置一个不是ndb.Property(即volatile)的实体属性,当你想避免在_post_put_hook中调用逻辑时,你可以显式设置它。

例如

来自我的zope days属性,这些属性不会保存在名为_v_somename

的位置

如此明确setattr(self,_v_no_hook,True) - 显然在方法中这样做; - )

然后只需检查_post_put_hook

中的旗帜
if not getattr(self,'_v_no_hook`,False):
     # do something.not  

你可以使用post put hooks,因为它们是方法,而不是类方法,大多数其他钩子都是。