4

我曾經使用get_by_id從數據存儲中獲取實體,從來沒有使用Ancestor Paths。但是我的模型的複雜性使得它變得有必要。事實上祖先路徑解決了一個大問題,但現在當我嘗試get_by_id實體返回None如果實體具有父鍵。這意味着,我需要添加父鍵:get_by_id和父鍵

entity = MyModel.get_by_id(id) 

這將變成:

entity = MyModel.get_by_id(id, parent=key) 

如何建立父鍵?

編輯:

在這一點上,我寧願讓祖先的路徑並添加另一個keyproperty。

+1

注意在get_by_id編號爲整數。 – 2012-07-06 12:28:25

+0

謝謝,我知道它:'int(self.request.get('id'))' – 2012-07-06 12:48:24

+0

我不能直接回答你的問題,因爲你父母的定義將非常依賴於你設計的數據模型。 get_by_id中的父項可以是密鑰或實體。我假設您已經閱讀了關於如何構造密鑰https://developers.google.com/appengine/docs/python/datastore/keyclass – 2012-07-06 13:07:01

回答

7

如果要使用實體組,你可以簡單地創建一個這樣的關鍵:

key_parent = db.Key.from_path('MyModelParent', 'id_parent') # You don't have to create this kind in the datastore. 

id = int(self.request.get('id')) 
entity = MyModel.get_by_id(id, parent=key_parent) 

我注意到:您可以使用一個大寫的關鍵參數。這是父母不是父母

entity = MyModel.get_by_id(id, Parent=key) # Wrong 
entity = MyModel.get_by_id(id, parent=key) 

哦,你正在使用NDB:

key_parent = ndb.Key('MyModelParent', 'id_parent') 
+0

如何獲得'id_parent'? – 2012-07-07 02:46:59

+0

在我提問的時候,我並不知道一件事:一個實體的ID不是絕對唯一的。這是因爲在我沒有父母和數字ID的情況下編碼之前。我不明白爲什麼如果ID是唯一的(錯誤),甚至需要構建父密鑰。 – 2013-08-21 20:20:11