Anpassungen für das Hosting bei Djangoeurope und damit verbundenen Versionen Django 1.8 und Python 2.7
This commit is contained in:
committed by
Christian Berg
parent
cb4b15b3c6
commit
37d3cb78c1
60
src/maistar_ranking/managers.py
Normal file
60
src/maistar_ranking/managers.py
Normal file
@@ -0,0 +1,60 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
"""
|
||||
Created on 22.11.2014
|
||||
|
||||
@author: christian
|
||||
"""
|
||||
from django.db import models
|
||||
|
||||
from . import settings
|
||||
|
||||
|
||||
class GameManager(models.Manager):
|
||||
use_for_related_fields = True
|
||||
|
||||
def player_games(self, player, season=None, **kwargs):
|
||||
queryset = self.filter(
|
||||
models.Q(player1=player) | models.Q(player2=player) |
|
||||
models.Q(player3=player) | models.Q(player4=player) |
|
||||
models.Q(player5=player) | models.Q(player6=player)
|
||||
)
|
||||
if season:
|
||||
queryset = queryset.filter(season=season)
|
||||
if kwargs:
|
||||
queryset = queryset.filter(**kwargs)
|
||||
return queryset
|
||||
|
||||
|
||||
class LadderManager(models.Manager):
|
||||
use_for_related_fields = True
|
||||
|
||||
def calculate_rankings(self, season):
|
||||
"""
|
||||
Berechnet die Jahresrankings für die Spieler neu.
|
||||
@param season: Das Jahr das neu berechnet werden soll
|
||||
@type season: Integer
|
||||
"""
|
||||
rankings = self.filter(season=season)
|
||||
rankings.update(placement=None)
|
||||
rankings = rankings.filter(
|
||||
games_count__gte=settings.MAISTAR_GAMES_FOR_LADDERRANKING) # @IgnorePep8
|
||||
rankings = rankings.order_by('avg_placement', '-avg_score')
|
||||
placement = 1
|
||||
previous_avg_placement = None
|
||||
previous_avg_score = None
|
||||
previous_placement = None
|
||||
for ranking in rankings:
|
||||
if ranking.avg_placement == previous_avg_placement \
|
||||
and ranking.avg_score == previous_avg_score:
|
||||
ranking.placement = previous_placement
|
||||
else:
|
||||
ranking.placement = placement
|
||||
ranking.save(force_update=True)
|
||||
previous_avg_placement = ranking.avg_placement
|
||||
previous_avg_score = ranking.avg_score
|
||||
previous_placement = ranking.placement
|
||||
placement += 1
|
||||
|
||||
def get_seasons(self):
|
||||
return self.values_list('season', flat=True).order_by(
|
||||
'season').distinct()
|
||||
Reference in New Issue
Block a user