데이터베이스 독립적 인 방식으로 행 번호를 가져 오기 -Django
-
13-09-2019 - |
문제
내가 가지고 있다고 가정 해 봅시다 '점수' 필드가있는 테이블 '사용자','scorea', '점수', 'scorec'. 리더 보드보기에서 나는 방문자가 선택한 이러한 점수 필드 중 하나에 의해 쿼리 세트를 가져 와서 주문합니다. 템플릿은 쿼리 세트를 페이지를 찍습니다. 테이블은 정규 기간 (CRON이 트리거 된 Django 명령)에서 작업에 의해 업데이트됩니다.
추가하고 싶습니다 '계급' 내가 가질 수 있도록 쿼리 세트에 필드 '계급', '사용자', 'scorea', '점수', 'scorec'. 또한 데이터베이스 독립성을 유지하고 싶습니다 (Postgre는 옵션이며 당분간은 지원하지 않습니다. row_number).
솔루션은 작업을 수정할 수있어 세 가지 새로운 필드에서 세 가지 다른 순위를 계산하고 작성하도록합니다.'랭카', '랭크', '랭크').
더 나은 솔루션이 있기를 바랍니다.
해결책
템플릿에서 순위를 계산할 수없는 이유는 무엇입니까?
{% 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 ) )
나는 이것을 할 수있는 많은 방법이 있다고 생각합니다.
제휴하지 않습니다 StackOverflow