由NDB查询中的父组

时间:2013-11-04 15:10:18

标签: google-app-engine app-engine-ndb

说我有学校,班级,学生模特的模特。 在这个模型中,课程是学校的孩子,学生是班级的孩子。我想要的是让所有学生按班级分组。

使用NDB我可以通过以下方式为学校A的学生打电话:

school_key = ndb.Key( 'School', 'A' )
all_students_in_A = Student.query( ancestor = school_key ).fetch( )

但是,我想让班上的学生进入A组。查看doc,查询接受group_by参数,但仅适用于模型的实际字段。

2 个答案:

答案 0 :(得分:2)

我一直在使用itertools的python groupby函数来发布进程和组实体。

您的选择需要按照所需的顺序进行排序,在您的情况下按密钥进行排序,因为您的父母在密钥中。

这种方法将维持秩序。

http://docs.python.org/2/library/itertools.html#itertools.groupby

我得到的代码不容易共享,因为我拥有的分组功能是存储/可授权查询实体的一部分,它允许按结果项的多个属性进行分组,并且实现分布在多个方法中。但如果您想看一些代码,请大声喊出来。

答案 1 :(得分:1)

我会在取得学生后用Python进行分组。

classes = defaultdict(list)
for student in all_students_in_A:
    class = student.key.id()
    classes[class].append(student)

现在,类是一个dict,其中键是类ID,值是学生列表。