4

假设我有一个带有学校、班级、学生模型的模型。在这个模型中,班级是学校的孩子,学生是班级的孩子。我想要的是让所有学生按班级分组。

使用 NDB,我可以通过以下方式为学校 A 召集学生:

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

但是,我想按班级让学生参加 A 组。查看文档,查询接受 group_by 参数,但仅适用于模型的实际字段。

4

2 回答 2

2

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

您的选择需要按要求的顺序排序,在您的情况下,您的父母在关键中。

这种方法将保持顺序。

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

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

于 2013-11-04T22:50:04.427 回答
1

获取学生后,我会在 Python 中进行分组。

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

现在 classes 是一个字典,其中键是班级 ID,值是学生列表。

于 2013-11-04T21:01:24.877 回答