3

エンティティの文字列でエンコードされたキーを取得するには、次のようにします。

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

親エンティティをフェッチせずに、子エンティティを介して生物学的親の文字列エンコードされたキーを取得するにはどうすればよいですか?

ありがとう!

4

3 に答える 3

4

次のようにフェッチせずに、参照プロパティのキーを取得できます。

ChildClass.bio_parent.get_value_for_datastore(child_instance)

そこから、通常どおりに文字列でエンコードされたフォームをフェッチできます。

于 2011-03-16T17:13:42.370 に答える
1

parentは、モデルクラスのキーワード引数です。だから、あなたが使うとき

child = Child (name='Johnny', 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. エンティティグループと祖先パス
于 2011-03-16T08:37:24.967 に答える
0

私はあなたがこの方法を達成できると思います。

string_encoded_key = str(child.bio_parent.key())
于 2011-03-16T09:52:54.277 に答える