Frage

Lassen Sie uns sagen, dass ich eine 'Noten' Tabelle mit Feldern 'User' , 'ScoreA' , 'ScoreB' , 'ScoreC' . In einer Rangliste Ansicht, die ich holen und eine queryset bestellen, indem einer dieser Felder ein Tor, das der Besucher auswählt. Die Vorlage paginiert die queryset. Die Tabelle wird durch einen Job auf regelmäßigen Abständen aktualisiert (ein django Befehl von cron ausgelöst).

Ich möchte ein 'Rang' hinzufügen auf die queryset so dass ich haben 'Rang' , 'User' , < strong> 'ScoreA' , 'ScoreB' , 'ScoreC' . Außerdem mag ich bleibe Datenbank-unabhängige (postgre eine Option ist und zur Zeit nicht unterstützt row_number ).

Eine Lösung kann sein, dass ich den Job ändern kann, so dass es berechnet auch und schreibt drei verschiedene Reihen in drei neuen Feldern ( 'Ranka' , 'rankB' 'rankC' ).

Ich hoffe, es gibt eine (viel) bessere Lösung?

War es hilfreich?

Lösung

Warum können Sie nicht den Rang in der Vorlage berechnen?

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

Alternativ können Sie den Rang in der View-Funktion berechnen.

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

Alternativ können Sie das Ranking im Modell berechnen.

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

Ich denke, es gibt viele, viele Möglichkeiten, dies zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top