Получите строковый ключ сущности из ссылочного свойства в appengine. - PullRequest
3 голосов
/ 16 марта 2011

Чтобы получить ключ объекта в строковом коде, я просто делаю следующее:

key = entity.key()
string_encoded_key = str(key)

У меня есть ссылка на другой объект через ReferenceProperty.

class ParentClass(db.Model):
name = db.StringProperty()

class ChildClass(db.Model):
name = db.StringProperty()
bio_parent = db.ReferenceProperty(ParentClass)


johnnys_parent = ParentClass(name="John").put()
child = ChildClass(name="Johnny",bio_parent=johnnys_parent).put()

#getting the string-encoded key of the parent through the child
child = ChildClass.all().filter("name","Johnny").get()
string_encoded_key = str(child.bio_parent) # <--- this doesn't give me the string-encoded key

Как я могу получить ключ биологического родителя в строковом коде через дочерний объект, не выбирая родительский объект?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 16 марта 2011

Вы можете получить ключ ссылочного свойства, не извлекая его следующим образом:

ChildClass.bio_parent.get_value_for_datastore(child_instance)

Оттуда вы можете получить закодированную строку как обычно.

1 голос
/ 16 марта 2011

parent является ключевым аргументом в классе модели.Таким образом, когда вы используете

child = Child (name='Johnny', parent=parent)

, это относится к parent этой сущности, а не к атрибуту parent .Вы должны изменить имя атрибута с родительского на более значимое и менее двусмысленное.

class ParentClass (db.Model):
  name = db.StringProperty ()

class ChildClass (db.Model):
  name = db.StringProperty ()
  ref = db.ReferenceProperty (ParentClass)

johns_parent = ParentClass (name='John Sr.').put ()
john = ChildClass (name='John Jr.', ref=johns_parent).put ()

# getting the string encoded key
children = ChildClass.all ().filter ('name', 'John Jr.').get ()
string_encoded_key = str (children.ref)

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

Ресурсы:

  1. Класс модели
  2. Ссылочное свойство
  3. Группы объектов и Путь предка
0 голосов
/ 16 марта 2011

Я думаю, вы можете достичь этого пути.

string_encoded_key = str(child.bio_parent.key())
...