【发布时间】:2013-11-04 15:10:17
【问题描述】:
假设我有一个包含学校、班级、学生模型的模型。 在这个模型中,班级是学校的孩子,学生是班级的孩子。我想要的是让所有学生按班级分组。
使用 NDB,我可以通过以下方式为学校 A 呼叫学生:
school_key = ndb.Key( 'School', 'A' )
all_students_in_A = Student.query( ancestor = school_key ).fetch( )
但是,我想按班级让 A 组中的学生。查看文档,查询接受 group_by 参数,但仅适用于模型的实际字段。
【问题讨论】:
-
我知道这不是您问题的答案,但我觉得我应该提出来。我不一定会让学生成为班级的孩子->学校。这是一个非常刚性的结构。当学生改变班级时会发生什么。学生的密钥必须改变(它不能)所以知道你必须创建一个新的学生实体来代表新班级中的学生。学生应该是学校的孩子(除非您希望学生在学校之间移动)学生应该有班级的注册记录或类似的记录。
-
谢谢@Tim。你是对的。然而,学校/班级/学生只是一个例子。我的实际产品是一家建筑公司网站,其中我有公司/项目/图像层次结构,更静态。
-
这里需要注意的是group_by类似于SQL的group by。主要目的是用于聚合(在数据存储的情况下,支持 SELECT DISTINCT)。如果你只是想让它们彼此相邻排列,你可以按 __key__ 排序。由于密钥是 /ancestor1key/ancestor2key/key,每个班级的所有学生将彼此相邻排列。但是,要真正将它们分组,您仍然需要进行后期处理。
标签: google-app-engine app-engine-ndb