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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top