buscar números de linha de uma forma independente de banco de dados - django
-
13-09-2019 - |
Pergunta
digamos Vamos que eu tenho um 'Scores' tabela com campos 'usuário' , 'ScoreA' , 'ScoreB' , 'ScoreC' . Em uma visão leaderboard I buscar e pedir um queryset por qualquer um desses campos pontuação que os seleciona visitante. O modelo paginates o queryset. A tabela é atualizada por um emprego em períodos regulares (um comando django desencadeada por cron).
Eu quero adicionar um 'ranking' para o queryset de modo que terei 'ranking' , 'Usuário' , < strong> 'ScoreA' , 'ScoreB' , 'ScoreC' . Além disso eu quero permanecer banco de dados independente (postgre é uma opção e por enquanto ele não suporta row_number ).
Uma solução pode ser que eu posso modificar o trabalho, para que ele também calcula e escreve três fileiras diferentes em três novos campos ( 'Ranka' , 'rankB' , 'rankC' ).
Espero que haja uma (muito) melhor solução?
Solução
Por que você não pode calcular o posto no modelo?
{% for row in results_to_display %}
<tr><td>{{forloop.counter}}</td><td>{{row.scorea}}</td>...
{% endfor %}
Ou, você pode calcular a posição na função de visualização.
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 } )
Ou, você pode calcular a classificação no modelo.
class Score( models.Model ):
ScoreA = models.IntegerField( ... )
def ranked_by_a( self ):
return enumerate( self.objects.filter(...).orderby( scorea ) )
Eu acho que há muitas, muitas maneiras de fazer isso.