aller chercher des numéros de ligne dans une base de données de façon indépendante - django

StackOverflow https://stackoverflow.com/questions/969074

  •  13-09-2019
  •  | 
  •  

Question

Disons que j'ai un Scores table avec les champs 'utilisateur' , 'Note en' , 'ScoreB' , ScoreC . Dans une vue leaderboard je fetch et commander un queryset par l'un de ces domaines que le score de visiteur sélectionne. Le modèle pagine le queryset. La table est mise à jour par un travail sur des périodes régulières (une commande django déclenché par cron).

Je veux ajouter un champ 'rang' à la queryset pour que j'aurai 'rang' , 'utilisateur' , < strong> 'Note en' , ScoreB , ScoreC . De plus, je veux rester base de données indépendante (postgre est une option et pour le moment il ne supporte pas row_number ).

Une solution peut être que je peux modifier le travail, de sorte qu'il calcule aussi et écrit trois rangs différents dans trois nouveaux domaines ( Ranka , rankB , 'rankC' ).

J'espère qu'il ya une meilleure (beaucoup) solution?

Était-ce utile?

La solution

Pourquoi ne pas calculer le rang dans le modèle?

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

Ou, vous pouvez calculer le rang dans la fonction de vue.

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, vous pouvez calculer le classement dans le modèle.

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

Je pense qu'il ya beaucoup de façons de le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top