2010-06-28 81 views
3

比方说,我有一个包含母亲,父亲和孩子对象的数据存储。在母亲和父亲的对象内部,我有一个名为“孩子”的字段,用于存储对孩子的引用。是否有可能从母亲和父亲中引用这个孩子,而不为每个孩子创建重复的子实例(以OOP的风格)。数据库是如何工作的?是否可以在Google App Engine中创建参考?

回答

5

是的,您可以使用db.ReferenceProperty来做到这一点。

引用属性只是存储它引用的实体的唯一键。因此,母亲和父亲实体可以分别包含与他们的孩子相对应的密钥副本,如下所示:

class Child(db.Model): 
    ... # child properties 
class Father(db.Model): 
    child = db.ReferenceProperty(Child) 
    ... 
class Mother(db.Model): 
    child = db.ReferenceProperty(Child) 
    ... 
+0

这是后续问题。现在假设母亲和父亲存储子对象(子女)的列表。由于列表是可扩展的,因此我不能将每个子代表作为它自己的实例变量(如:child_x = db.ReferenceProperty(Child)。我将如何存储对Child对象的引用列表? – Petwoip 2010-06-28 18:16:07

+1

您可以使用[db.ListProperty]( http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#ListProperty)来存储[db.Key]的列表(http://code.google.com/appengine/docs/python /datastore/keyclass.html),每个引用一个'Child'实体。阅读更多关于它[这里](http://code.google.com/appengine/docs/python/datastore/entitiesandmodels.html#Lists) 。 – 2010-06-28 18:36:02

+0

非常感谢您的帮助! – Petwoip 2010-06-29 13:48:29

相关问题