您如何在Google App Engine中自动取消引用db.ReferenceProperty?

all*_*ode 2 python google-app-engine google-cloud-datastore

假设我有

class Foo(db.Model):

  bar = db.ReferenceProperty(Bar)

foo = Foo.all().get()
Run Code Online (Sandbox Code Playgroud)

有没有办法让我在没有查询数据存储的情况下执行foo.bar?该文档说foo.bar会的一个实例Key,所以我希望能够做的foo.bar.id()和能够得到idBar是与相关的foo,但它似乎并没有这样的.

PS:我所指的文档部分可以在这里找到:

http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#ReferenceProperty

它说:

"应用程序可以显式地db.get()ReferenceProperty(它是一个Key)的值来测试引用的实体是否存在."

Ale*_*lli 8

正如文档所说,

ReferenceProperty值可以像使用模型实例一样使用,并且将获取数据存储区实体,并在以这种方式首次使用时创建模型实例.未触及的引用属性不会查询不需要的数据.

所以只要你不触摸它就可以了,但如果你这样做,例如.id()你正在显示一个电话,"数据存储区实体将被取出",文档说.这里有更多的文档,但它们也没有显示出一种神奇地获取id而无需获取的方法.

我没有尝试过,但是您可以使用属性的get_value_for_datastore来获取"属性的Python本机值",我相信它确实是一个Key - 其id()方法应该可以在没有数据存储区提取的情况下调用.你试过吗?