说我有两个班级:
class A(db.Model):
class B(db.Model):
a_reference = ReferenceProperty(A)
我现在可以执行以下操作:
a = A()
a.put()
b = B();
b.a_reference = a.key()
b.put()
documentation说明了以下两点:
ReferenceProperty值可以像使用模型实例一样使用,并且将获取数据存储区实体,并在以这种方式首次使用时创建模型实例。
后来还说:
应用程序可以显式地db.get()ReferenceProperty(这是一个Key)的值来测试引用的实体是否存在。
那是什么意思?值是key
,但它可以用作模型实例吗?
如果我这样做:
a2 = b.a_reference
a2的类型为A
,而不是key
。这是否意味着变量a_reference
的行为类似于模型实例,直到该实例被删除,然后它将返回一个键(指向一个不存在的实例)?
答案 0 :(得分:3)
ReferenceProperty将始终尝试返回存储键指向的类的实例。如果引用的对象已被删除,我相信你会回来无。 From the docs:
obj1 = obj2.reference
if not obj1:
# Referenced entity was deleted.
如果您想获取最初存储的密钥,可以使用get_value_for_datastore:
a = A()
a.put()
b = B();
b.a_reference = a.key()
b.put()
orginial_key = b.a_reference.get_value_for_datastore()