代码之家  ›  专栏  ›  技术社区  ›  Klaus Byskov Pedersen

需要帮助理解引用属性

  •  0
  • Klaus Byskov Pedersen  · 技术社区  · 14 年前

    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值可以像模型实例一样使用,当第一次以这种方式使用时,将获取数据存储实体并创建模型实例。

    后来还说:

    那这是什么意思?值是 key

    如果我这样做了:

    a2 = b.a_reference
    

    A ,不是 钥匙 . 这是否意味着变量 a_reference

    1 回复  |  直到 14 年前
        1
  •  3
  •   Adam Crossland    14 年前

    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()