Есть ли простой способ изменить родительский элемент записи в хранилище данных Google App Engine? - PullRequest
7 голосов
/ 30 апреля 2009

С учетом

class Category(db.Model):
   name = db.Stringproperty()

Скажем, у меня есть вложенная иерархия

-root
 |-a
 | |-b
 |   |-c
 |-x
   |-y
     |-z1
     |-z2

где a родитель root, b родитель a, c родитель b и т. Д.

Существует ли простой способ, которым я мог бы переместить узел y с x на b таким образом, чтобы z1 и z2 продолжали оставаться дочерними элементами y:

-root
 |-a
 | |-b
 |   |-c
 |   |-y
 |     |-z1
 |     |-z2
 |-x

Это означало бы, что я просто поменяю родителя y.

Однако, если это невозможно, тогда потребуется

  1. создание новой записи ny = Category(parent=b, name=y) и
  2. рекурсивно для каждого дочернего элемента y, создающего новую запись с ny в качестве родителя и
  3. чем удаление y и его потомков.

1 Ответ

8 голосов
/ 01 мая 2009

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

...