2010-04-09 10 views
2

Je dois être capable de créer une structure arborescente dans la base de données appengine.
J'ai essayé de créer une référence d'objet mais je n'ai pas réussi à l'utiliser.Structure de l'arborescence de datastore Google appengine

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

Et quel genre d'arbre les nœuds eux-mêmes se référencent –

+0

Les nœuds eux-mêmes ne se référencent pas eux-mêmes dans son extrait de code, mais la classe 'Node' doit faire référence à d'autres objets' Node' pour créer un arbre. Au lieu de cela, un enfant doit référencer son parent (voir ma réponse) –

Répondre

3

Vous pouvez stocker des références aux enfants dans le parent avec:

class Node(db.Model): 
    children = db.ListProperty(db.Key) 

Cette réponse sans vergogne volée (! Avec crédit) de la réponse de Nick Johnson à this related question

1

Here est un sujet connexe du groupe google-appengine.

Vous pouvez stocker une référence au nœud parent dans chaque enfant, au lieu de références aux nœuds enfants du parent.

Voici quelques code:

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 est un champ spécial sur une Model qui indique au datastore qu'une entité a une relation parent-enfant avec son parent.

De l'docs:

Lorsque l'application crée une entité , il peut attribuer une autre entité en tant que parent de la nouvelle entité, en utilisant l'argument parent dans le modèle constructeur . L'attribution d'un parent à une nouvelle entité place la nouvelle entité dans le même groupe d'entités que l'entité .

Une entité sans parent est une entité racine. Une entité qui est un parent pour une autre entité peut également avoir un parent. Une chaîne d'entités parents d'une entité jusqu'à la racine est le chemin de l'entité et les membres du chemin sont les ancêtres de l'entité. Le parent d'une entité est défini lorsque l'entité est créée et ne peut plus être modifié ultérieurement.

+2

Vous ne devez pas utiliser de relations parent/enfant dans le magasin de données sauf si les entités doivent se trouver dans le même domaine transactionnel (groupe d'entités). –

Questions connexes