获取引用属性的键字符串,而不使用App Engine中的数据存储区

时间:2012-12-30 03:19:01

标签: python google-app-engine datastore referenceproperty

如何在不使用数据存储区获取对象的情况下获取引用属性的键字符串?

我有两个由db.ReferenceProperty链接的数据存储对象:

 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.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()来确定密钥字符串。

我想从链接的ReferenceProperty获取键值而不实际实例化Track对象。你知道我怎么做吗?

1 个答案:

答案 0 :(得分:0)

正如有人提到你可以将属性更改为KeyProperty,或者你可以使用属性的property.get_value_for_datastore(obj)方法获取密钥而不解析对象。

请参阅文档https://developers.google.com/appengine/docs/python/datastore/propertyclass#Property_get_value_for_datastore

通常你会用它来获取密钥,比如

key = myclass.some_property.get_value_for_datastore(some_obj)

所以在你的例子中

track_key = Video.track.get_value_for_datastore(视频)

干杯