2010-05-25 49 views
1

我有2种型号:在Google App Engine中搜索模型关系?

class Parent (db.Model) : 
    data = db.StringProperty() 


class Child1 (db.Model) : 
    parent = db.ReferenceProperty(Parent) 
    childData = db.StringProperty() 

class Child2 (db.Model) : 
    parent = db.ReferenceProperty(Parent) 
    childData2 = db.StringProperty() 

class Child3 (db.Model) : 
    parent = db.ReferenceProperty(Parent) 
    childData3 = db.StringProperty() 

....

我想查询,可以给我不生孩子但所有家长的列表。我该怎么做?

我不想在父模型中为每个孩子维护一个标识符,因为我想经常添加新的子模型。

+1

顺便说一下,“parent”是一个保留的属性名,所以你的例子根本不起作用。 – geoffspear 2010-05-25 22:18:24

回答

1

处理这个问题的正确方法是在您的父实体中保留一定数量的子女。然后,您可以简单地查询子计数等于0的父母。

您不需要在父实体中具有子标识;你想保留一个计数的儿童人数。孩子是一种型号还是另一种型号并不一定重要。保持这种运行计数的目的是让你解决你的问题,这是查询无子女的父母。数据存储或提供此功能的AppEngine查询对象没有本地功能。

如此以来,这本身不支持,你必须做的两种方式中选择其一:

1)保持孩子的数量的运行计数,递增或递减当添加或删除子; 2a)查询每种类型的每个孩子并记录父代的唯一值。

2B)查询所有父实体和匹配了独特的父类标识从2A

我将让你来决定哪一种方法是正确的。

+0

更新了我的问题。我不想在父级中添加子级ID。 – demos 2010-05-25 17:49:39

+0

@demos,更新我的答案以符合您更新的问题 – 2010-05-25 18:12:48