0

フィールドが「User」「ScoreA」「ScoreB」 ScoreC」の「Scores」テーブルがあるとします。リーダーボードビューで、訪問者が選択したこれらのスコアフィールドのいずれかによってクエリセットをフェッチして並べ替えます。テンプレートはクエリセットをページ分割します。テーブルは定期的にジョブによって更新されます(cronによってトリガーされるdjangoコマンド)。

クエリセットに「rank」フィールドを追加して、 「 rank」「User」「ScoreA」「ScoreB」「ScoreC」を作成します。さらに、データベースに依存しないようにしたい(postgreはオプションであり、当面はrow_numberをサポートしません

解決策は、ジョブを変更して、3つの新しいフィールド('rankA''rankB''rankC')に3つの異なるランクを計算して書き込むことです。

(はるかに)より良い解決策があるといいのですが?

4

1 に答える 1

3

テンプレートでランクを計算できないのはなぜですか?

{% for row in results_to_display %}
    <tr><td>{{forloop.counter}}</td><td>{{row.scorea}}</td>...
{% endfor %}

または、ビュー関数でランクを計算できます。

def fetch_ranked_scores( request ):
    query = Score.objects.filter( ... ).orderby( scorea )
    scores = [ r, s.scorea for r, s in enumerate(query) ]
    return render_to_response ( template, { 'results_to_display':scores } )

または、モデルのランキングを計算できます。

 class Score( models.Model ):
     ScoreA = models.IntegerField( ... )
     def ranked_by_a( self ):
         return enumerate( self.objects.filter(...).orderby( scorea ) )

これを行うには、たくさんの方法があると思います。

于 2009-06-09T10:20:35.807 に答える