0

オブジェクトを取得するためにデータストアを使用せずに、参照プロパティのキー文字列を取得するにはどうすればよいですか?

db.ReferenceProperty によってリンクされた 2 つのデータストア オブジェクトがあります。

 class Track(db.Model):
   name   = db.StringProperty()
 class Video(db.Model):
   name  = db.StringProperty()
   track = db.ReferenceProperty(Track, collection_name='video-track')

これにより、特定のビデオからリンクされたトラックを簡単に取得できます。

 video = Video.get(a_video_key_string)
 track = video.track

そして、後ですばやくアクセスできるように、これらを memcache に保存できます。

 memcache.add(str(video.key()), video)
 memcache.add(str(track.key()), track)

これで、memcache からビデオまたはトラックを取得できます。

 video = memcache.get(a_video_key_string)
 track = memcache.get(str(video.track.key()))

ただし、これにより、トラックのデータストア要求が生成されますが、望んでいません。具体的には、video.track リクエストは自動的にデータストアを呼び出して Track オブジェクトを取得し、次に key() を呼び出してキー文字列を決定します。

Track オブジェクトを実際にインスタンス化せずに、リンクされた ReferenceProperty からキー値を取得したいと考えています。どうすればこれができるか知っていますか?

4

1 に答える 1

0

誰かが言ったように、プロパティを KeyProperty に変更できます。代わりに、プロパティの property.get_value_for_datastore(obj) メソッドを使用して、オブジェクトを解決せずにキーを取得できます。

ドキュメント https://developers.google.com/appengine/docs/python/datastore/propertyclass#Property_get_value_for_datastoreを参照してください

通常、次のようなものを使用してキーを取得するために使用します

キー = myclass.some_property.get_value_for_datastore(some_obj)

あなたの場合、あなたの例から

track_key = Video.track.get_value_for_datastore(ビデオ)

乾杯

于 2012-12-30T11:39:03.713 に答える