开发者

Need help understanding ReferenceProperty

Say I have two classes:

class A(db.Model):

class B(db.Model):
    a_reference = ReferenceProperty(A)

I can now do the following:

a = A()
a.put()

b = B();
b.a_reference = a.key()

b.put()

The documentation states the following two things:

The ReferenceProperty value can be used as if it were a model instance, and the datastore entity will be fetched and the model instance created when it is first used in this way.

And later also states:

An application can explicitly db.get() the value of a ReferenceProperty (which is a Key) to test whether the referenced entity exists.

So what does that mean? The value is a key but it can be used a model instance?

If I do:

a2 = b.a_reference

a2 will be of type A, not key. Does this mean that the variable a_reference will behave like开发者_Go百科 a model instance until that instance is deleted, whereafter it will return a key (pointing to a non-existing instance)?


A ReferenceProperty will always try to return an instance of the class that the stored key points to. If the referenced object has been deleted, I believe that you get back None. From the docs:

obj1 = obj2.reference

if not obj1:
    # Referenced entity was deleted.

If you want to get the key that was originally stored, you can use 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()
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜