0

假设我有一个'Scores'表,其中包含'User''ScoreA''ScoreB''ScoreC' 字段。在排行榜视图中,我通过访问者选择的这些得分字段中的任何一个来获取和排序查询集。模板对查询集进行分页。该表由作业定期更新(由 cron 触发的 django 命令)。

我想在查询集中添加一个'rank'字段,以便我将拥有'rank''User''ScoreA''ScoreB''ScoreC'。此外,我想保持数据库独立(postgre 是一个选项,目前它不支持row_number)。

一个解决方案可能是我可以修改作业,以便它还在三个新字段('rankA''rankB''rankC')中计算和写入三个不同的等级。

我希望有一个(很多)更好的解决方案?

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 回答