2012-05-12 4 views
0

私はこれらのモデルを持っている:ここではこの関係をモデル化するより良い方法はありますか?

class Assignment(db.Model): 
    title = db.StringPeoperty(required=True) 
    ...other stuff... 

class TeamScore(db.Model): 
    assignment = db.ReferenceProperty(Assignment, 
             collection_name="teamScores", 
             required=True) 
    teamID = db.IntegerProperty(required = True) 
    score = db.IntegerProperty(required = True) 
    ...other stuff... 

はpeoblemです。ホームページでは、各課題のチームワークの上位3つ(スコアに基づいて)を示したいと思います。だから、私は私のテンプレートにこれを渡す:テンプレートで

assignments = Assignment.all() 

{% for assignment in assignments%} 
    **<!--How to implement showing the top three-->** 
    {% for score in assignment.teamScores%} 
     {{score.teamID}} 
     {{score.score}} 
     ............... 
    {% endfor%} 
{%endfor%} 

このデータストアモデルでは。私はテンプレートで並べ替える必要があります、それは不可能です。だから、私はこの問題に対処するより良いモデルを持っているかもしれないと思います。しかし、私はそれを理解することはできません。私はこのアイデアを考えて、ListPropertyを追加してトップ3を格納しました。新しいTeamScoreが生成されるたびに、これをListのスコアと比較して、トップ3を新鮮に保ちます。しかし、私はこの方法が雄弁ではないと思う。

私にいくつかの提案を教えてもらえますか?

ありがとうございました!

答えて

1

これはデータモデリングの問題ではなく、テンプレート化された問題です。割り当てモデルを渡してテンプレート内の残りの作業を行うのではなく、割り当てをフェッチしてコード内のスコアのリストを取得して結果をテンプレートに渡す必要があります。

+0

ありがとうございました。しかし、多くの課題があり、それぞれの課題に対してTOP3が必要です。 Pythonファイルでクエリを実行すると、これらの割り当てをすべて反復して、すべてのTOP3を見つける必要があることを意味します。 1つの割り当てのTOP3を取得するには、私は 'assignmentEntity.teamScores.order( ' - score')。fetch(3)'を試してみます。注文は機能しません。注文機能は、参照プロパティ上のユーザーではありませんか? – hakunami

+0

@stevenYANGはい、どこにいても多くのクエリを実行する必要があります。 2番目の要素がトップスコアのリストである(割り当て、トップ3の)タプルのリストを構築することをお勧めします。 –

+0

申し訳ありません、私はちょうど私が参照プロパティを注文することができますことを明確にしたいですか?最後のコメントに書いたコードは使えますか? – hakunami