我需要能夠在appengine數據庫中創建一個類似於結構的樹。
我試圖做一個對象引用本身,但沒有得到它的工作。Google appengine數據存儲樹結構
class Item(db.Model):
children = db.ListProperty(db.ReferenceProperty(Item))
我需要能夠在appengine數據庫中創建一個類似於結構的樹。
我試圖做一個對象引用本身,但沒有得到它的工作。Google appengine數據存儲樹結構
class Item(db.Model):
children = db.ListProperty(db.ReferenceProperty(Item))
或者,也可以在與父存儲到孩子的引用:
class Node(db.Model):
children = db.ListProperty(db.Key)
從尼克·約翰遜的回答
這個答案無恥被盜(!與信貸),以this related question
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 構造使用 父的說法。將父項分配給 新實體會將新實體置於與實體 實體相同的實體組中。
沒有父項的實體是根實體。作爲另一個實體的父項的實體也可以具有父項。從實體到根的父實體鏈是實體的路徑,路徑的成員是實體的祖先。實體的父代在創建實體時定義,並且以後不能更改。
除非實體需要位於同一事務域(實體組)中,否則不應在數據存儲中使用父/子關係。 – 2010-04-09 07:40:47
你到底是什麼樣的樹有自己的節點引用 – 2010-04-09 03:49:27
節點本身沒有在他的代碼片段中引用自己,但'Node'類需要引用其他'Node'對象來構建樹。相反,孩子應該引用其父(請參閱我的回答) – 2010-04-09 03:59:26