2010-04-09 104 views
2

我需要能夠在appengine數據庫中創建一個類似於結構的樹。
我試圖做一個對象引用本身,但沒有得到它的工作。Google appengine數據存儲樹結構

class Item(db.Model): 
    children = db.ListProperty(db.ReferenceProperty(Item)) 
+0

你到底是什麼樣的樹有自己的節點引用 – 2010-04-09 03:49:27

+0

節點本身沒有在他的代碼片段中引用自己,但'Node'類需要引用其他'Node'對象來構建樹。相反,孩子應該引用其父(請參閱我的回答) – 2010-04-09 03:59:26

回答

3

或者,也可以在與父存儲到孩子的引用:

class Node(db.Model): 
    children = db.ListProperty(db.Key) 
從尼克·約翰遜的回答

這個答案無恥被盜(!與信貸),以this related question

1

Here是來自google-appengine組的相關話題。

您可以在每個子項中存儲對父節點的引用,而不是對父級中的子節點的引用。

下面是一些代碼:

class Node(db.Model): 
    pass 

...snip... 

root = Node() 
db.put(root) 

for i in xrange(10): 
    child = Node(parent=root) 
    db.put(child) 

    for i in xrange(5): 
     grandchild = Node(parent=child) 
     db.put(grandchild) 

parent是一個Model它告訴一個實體與其父父子關係數據存儲一個特殊的領域。

docs

當應用程序創建一個 實體,它可以分配另一個實體作爲 新實體的母公司,在Model 構造使用 父的說法。將父項分配給 新實體會將新實體置於與實體 實體相同的實體組中。

沒有父項的實體是根實體。作爲另一個實體的父項的實體也可以具有父項。從實體到根的父實體鏈是實體的路徑,路徑的成員是實體的祖先。實體的父代在創建實體時定義,並且以後不能更改。

+2

除非實體需要位於同一事務域(實體組)中,否則不應在數據存儲中使用父/子關係。 – 2010-04-09 07:40:47