Google appengine древовидная структура хранилища данных - PullRequest
2 голосов
/ 09 апреля 2010

Мне нужно иметь возможность создавать древовидную структуру в базе данных appengine.
Я попытался сделать ссылку на объект сам, но не заставил его работать.

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

Ответы [ 2 ]

3 голосов
/ 09 апреля 2010

Кроме того, вы можете хранить ссылки на детей в родительском элементе с помощью:

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

Этот ответ бессовестно украден (с благодарностью!) Из ответа Ника Джонсона на этот связанный вопрос

1 голос
/ 09 апреля 2010

Здесь является связанной темой из группы 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, которое сообщает хранилищу данных, что у сущности есть родительско-дочерние отношения со своим родителем.

Из документов :

Когда приложение создает объект, он может назначить другой объект в качестве родителя новой сущности, используя родительский аргумент в модели конструктор. Назначение родителя новая сущность помещает новую сущность в та же группа лиц, что и родитель юридическое лицо.

Сущность без родителя является корневой сущностью. Сущность, которая является родительской для другой сущности, также может иметь родителя. Цепочка родительских сущностей от сущности до корня - это путь к сущности, а члены пути - это предки сущности. Родитель объекта определяется при создании объекта и не может быть изменен позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...