0

我已經在更新一些搜索索引的ndb模型上設置了_post_put_hook。它簡化了數據導入和原子更新。 但我有一種情況,我想更新該模型的某些屬性而不觸發索引操作。有選擇地觸發模型_post_put_hook

所以我在尋找之一:

  1. 有些種類標誌的,可以與_post_put_hook使用,或者:
  2. 辦法知道屬性/值對認沽改變了模型()所以我可以添加一個條件來更新索引或不。

謝謝!

+0

更難的部分是監視屬性,看看他們是否已經改變。因爲沒有像'ndb.Model'基類那樣的方法。數據存儲在_values中。 –

+0

你可以,只是不直接與鉤,但他們幫助。使用更高級別的get來創建屬性的副本,並創建它們的哈希。在_pre_put中,然後比較散列,如果不同則查找更改,並在我們的案例中存儲一個審覈跟蹤,以及由誰製作的實體。 –

回答

2

一種方法是設置不是一個ndb.Property(即揮發性)當您想避免調用在_post_put_hook邏輯,你設定一個明確的實體屬性。

例如

從我的Zope天特性,不會被保存在那裏命名_v_somename

如此明確setattr(self,_v_no_hook,True) - 顯然做到這一點的方法;-)

然後就是檢查在_post_put_hook

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

標誌,您可以用後用鉤子鉤住他們做到這一點是方法,而不是類方法,其中大多數其他鉤子都是。

+0

謝謝Tim!將使用這種方法。 –