假设我有一个'得分'表,字段'用户','得分A','得分B' ,'ScoreC'。在排行榜视图中,我通过访问者选择的任何一个得分字段来获取和订购查询集。模板对查询集进行分页。该表由常规期间的作业更新(由cron触发的django命令)。
我想在查询集中添加'排名'字段,以便我有'排名','用户',< strong>'ScoreA','ScoreB','ScoreC'。此外,我希望保持与数据库无关(postgre是一个选项,目前它不支持 row_number )。
解决方案可能是我可以修改作业,以便它还可以在三个新字段中计算和写入三个不同的等级('rankA','rankB' ,'rankC')。
我希望有更好的解决方案吗?
答案 0 :(得分: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 ) )
我认为有很多方法可以做到这一点。