如何在Google App Engine上继承db.ReferenceProperty

时间:2013-11-29 10:44:38

标签: google-app-engine python-2.7 google-cloud-datastore

我的数据存储区中有这样的内容:

class Referenced(db.Model):
    foo = db.StringProperty()

class Parent(db.Model):
    ref_key = db.ReferenceProperty(Referenced, collection_name='items')

class Child(Parent):
    foo = db.StringProperty()

所以,现在如果我创建一个Referenced实例和Child引用该实例,就像这样:

def get_referenced():
    referenced = Referenced()
    referenced.put()
    item = Child(ref_key=referenced.key())
    item.put()
    return referenced

并尝试访问referenced.items我将获得一个空列表,因为appengine正在查询Parent实例的数据存储区ref_key等于referenced.key(),显然没有实例在数据存储区中Parent,因此它返回一个空列表。

所以我的问题,这是一个错误吗?或者也许我做错了什么。有没有办法可以实现这种行为?

非常感谢!

1 个答案:

答案 0 :(得分:1)

不,这不是一个错误。另外,你最后会得到一个反向引用的名称冲突,因为Child和Parent将拥有相同的集合名称项。

您需要使用PolyModel来执行您想要的操作。

如果您刚开始,那么您应立即停止并转移到ndb。如果你有一个现有的代码库,那么请忽略这一点建议。