выборка номеров строк независимым от базы данных способом - django - PullRequest
0 голосов
/ 09 июня 2009

Допустим, у меня есть таблица 'Счета' с полями 'Пользователь' , 'ScoreA' , 'ScoreB', 'ScoreC' . В представлении списка лидеров я выбираю и упорядочиваю набор запросов по любому из этих полей оценки, которые выбирает посетитель. Шаблон разбивает на страницы набор запросов. Таблица обновляется заданием на регулярные периоды (команда django, запускаемая cron).

Я хочу добавить 'rank' поле к набору запросов, чтобы у меня было 'rank' , 'User' , ' ScoreA ', ' ScoreB ', ' ScoreC '. Более того, я хочу остаться независимым от базы данных (postgre является опцией и в настоящее время не поддерживает row_number ).

Решением может быть то, что я могу изменить задание, чтобы оно также вычисляло и записывало три различных ранга в трех новых полях ( rankA ', rankB' , rankC ').

Надеюсь, есть (намного) лучшее решение?

1 Ответ

3 голосов
/ 09 июня 2009

Почему вы не можете вычислить ранг в шаблоне?

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

Или вы можете вычислить ранг в функции просмотра.

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

Или вы можете вычислить рейтинг в модели.

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

Я думаю, что есть много, много способов сделать это.

...