从appengine中的引用属性获取实体的字符串编码键

时间:2011-03-16 08:11:30

标签: google-app-engine referenceproperty

为了获取实体的字符串编码密钥,我只需执行以下操作:

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 个答案:

答案 0 :(得分:4)

您可以获取引用属性的键而不像这样获取它:

ChildClass.bio_parent.get_value_for_datastore(child_instance)

从那里,您可以像往常一样获取字符串编码形式。

答案 1 :(得分:1)

parent 是Model Class中的关键字参数。所以,当你使用

child = Child (name='Johnny', 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. Model Class
  2. Reference Property
  3. Entity Groups and Ancestor Path

答案 2 :(得分:0)

我认为你可以这样做。

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