4

School、Class、Student モデルのモデルがあるとします。このモデルでは、クラスは School の子であり、学生は class の子です。私が望むのは、クラスごとにグループ化されたすべての学生を取得することです。

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)

現在、クラスは dict であり、キーはクラス ID であり、値は生徒のリストです。

于 2013-11-04T21:01:24.877 に答える