2012-03-07 39 views
-1

我在Appengine項目中使用NDB。在刪除某個實體後,我正在使用_post_delete_hook進行一些操作。在這個方法中,我有鑰匙。但是,當我做key.get()時,我得到一個錯誤。 這是一些示例代碼。訪問Appengine NDB中刪除的實體

[friends/models.py] 

from ndb import models 
from users.models import User 

class FriendShip(models.Model): 
    user = models.KeyProperty(kind=User) 
    friend = models.KeyProperty(kind=User) 

    @classmethod 
    def _post_delete_hook(cls, key, future): 
     signals.post_delete.send(cls, instance=key) 

[some-other-filer.py] 

# connected method to post_detele_hook 
def ended_friendship(sender, **kwargs): 
    key = kwargs.get('instance', None) 
    if key: 
     user = key.get().user # raise a non existing entity error 

有些幫助嗎?

這是關於鉤子的文檔。 http://code.google.com/appengine/docs/python/ndb/entities.html#hooks

+0

如果它已被刪除,您將無法再獲取它。你爲什麼期望能夠? – geoffspear 2012-03-07 17:52:49

+0

正好。一旦刪除,您將無法再訪問它。 – aschmid00 2012-03-07 18:29:57

回答

2

對於您的用例(想要訪問方法中的實體),_pre_delete_hook可能更有意義。見http://code.google.com/appengine/docs/python/ndb/modelclass.html#Model__pre_delete_hook

+0

感謝您的回覆。但是有一個pre_hook成功刪除操作的授予?在我的情況下,我想要一個post_delete_hook來減少一些擁有與被刪除實體相關的實體的總數。 – francofuji 2012-03-07 19:18:55

+0

您必須找到一種機制,將信息從預刪除掛鉤傳遞到刪除後掛鉤。可能某種按鍵索引的全局字典可能會起作用(確保刪除後刪除鉤子中的鍵)。 – 2012-03-07 20:13:28

+0

不能像Django模型信號那樣是被刪除的實體嗎?我現在在想,如果我想知道某個實體是第一次被保存還是剛剛更新,我應該使用pre_put和post_put鉤子進行某種遊戲。在post_put_hook中創建一個參數會很棒。像Django一樣。 – francofuji 2012-03-07 21:06:46