Domanda

Diciamo che ho un dei 'punti' tabella con i campi 'utente' , 'ScoreA' , 'ScoreB' , 'ScoreC' . In una vista leaderboard vado a prendere e ordinare un set di query da uno qualsiasi di questi campi punteggio che il visitatore seleziona. Il modello impagina il set di query. La tabella viene aggiornata da un lavoro su periodi regolari (un comando Django innescato da cron).

Voglio aggiungere un 'rango' per il set di query in modo che avrò 'rango' , 'utente' , < strong> 'ScoreA' , 'ScoreB' , 'ScoreC' . Inoltre voglio rimanere indipendente dal database (postgre è un'opzione e per il momento non supporta row_number ).

Una soluzione potrebbe essere che posso modificare il lavoro, in modo che calcola anche e scrive tre diversi gradi in tre nuovi campi ( 'Ranka' , 'rankB' , 'rankC' ).

spero che ci sia un (molto) migliore soluzione?

È stato utile?

Soluzione

Perché non si può calcolare il rango nel modello?

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

In alternativa, è possibile calcolare il rango nella funzione di visualizzazione.

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 } )

In alternativa, è possibile calcolare la classifica nel modello.

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

Penso che ci sono molti, molti modi per farlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top