0

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

我有 2 个由 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 对象。你知道我该怎么做吗?

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 回答