Anpassungen des Codes an Django 1.11 mit Python 3
Grapelli wurde entfernt, das neue Django Admin ist hübsch genug.
This commit is contained in:
@@ -76,8 +76,7 @@ class EventRanking(models.Model):
|
||||
self.good_hanchans += 1 if hanchan.placement == 2 else 0
|
||||
self.avg_placement = sum_placement / self.hanchan_count
|
||||
self.avg_score = sum_score / self.hanchan_count
|
||||
self.save(force_update=True)
|
||||
|
||||
self.save(force_update=True)
|
||||
|
||||
|
||||
class Hanchan(models.Model):
|
||||
@@ -95,7 +94,6 @@ class Hanchan(models.Model):
|
||||
player1 = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
limit_choices_to={'is_active': True, 'membership': True},
|
||||
related_name='user_hanchan+',
|
||||
verbose_name=_('Player 1'))
|
||||
player1_input_score = models.IntegerField(_('Score'))
|
||||
@@ -115,7 +113,6 @@ class Hanchan(models.Model):
|
||||
player2 = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
limit_choices_to={'is_active': True, 'membership': True},
|
||||
related_name='user_hanchan+',
|
||||
verbose_name=_('Player 2'))
|
||||
player2_input_score = models.IntegerField(_('Score'))
|
||||
@@ -135,7 +132,6 @@ class Hanchan(models.Model):
|
||||
player3 = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
limit_choices_to={'is_active': True, 'membership': True},
|
||||
related_name='user_hanchan+',
|
||||
verbose_name=_('Player 3'))
|
||||
player3_input_score = models.IntegerField(_('Score'))
|
||||
@@ -155,7 +151,6 @@ class Hanchan(models.Model):
|
||||
player4 = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
limit_choices_to={'is_active': True, 'membership': True},
|
||||
related_name='user_hanchan+',
|
||||
verbose_name=_('Player 4'))
|
||||
player4_input_score = models.IntegerField(_('Score'))
|
||||
@@ -205,11 +200,11 @@ class Hanchan(models.Model):
|
||||
|
||||
try:
|
||||
self.clean_fields()
|
||||
except ValidationError as e:
|
||||
print e.update_error_dict(errors)
|
||||
except ValidationError as exception:
|
||||
exception.update_error_dict(errors)
|
||||
return
|
||||
|
||||
for i in xrange(1, 5):
|
||||
for i in range(1, 5):
|
||||
player = getattr(self, 'player%d' % i)
|
||||
input_score = getattr(self, 'player%d_input_score' % i)
|
||||
score_sum += input_score
|
||||
@@ -309,7 +304,7 @@ class Hanchan(models.Model):
|
||||
@property
|
||||
def player_list(self):
|
||||
player_list = []
|
||||
for i in xrange(1, 5):
|
||||
for i in range(1, 5):
|
||||
player_list.append({
|
||||
'user': getattr(self, 'player%d' % i),
|
||||
'input_score': getattr(self, 'player%d_input_score' % i),
|
||||
@@ -324,10 +319,12 @@ class Hanchan(models.Model):
|
||||
return sorted(player_list, key=lambda player: player['input_score'],
|
||||
reverse=True)
|
||||
|
||||
def save(self, **kwargs):
|
||||
def save(self, recalculate=True, **kwargs):
|
||||
self.season = self.event.mahjong_season or self.start.year
|
||||
self.full_clean()
|
||||
self.compute_player_placements()
|
||||
if recalculate:
|
||||
self.compute_player_placements()
|
||||
update_ranking(sender=Hanchan, instance=self)
|
||||
return models.Model.save(self, **kwargs)
|
||||
|
||||
|
||||
@@ -435,7 +432,7 @@ class KyuDanRanking(models.Model):
|
||||
else:
|
||||
return reverse('player-kyu-score', args=[self.user.username])
|
||||
|
||||
def recalculate(self):
|
||||
def recalculate(self, hanchan_start=None):
|
||||
"""
|
||||
Fetches all valid Hanchans from this Player and recalculates his
|
||||
Kyu/Dan Ranking.
|
||||
@@ -449,14 +446,23 @@ class KyuDanRanking(models.Model):
|
||||
self.good_hanchans = 0
|
||||
self.won_hanchans = 0
|
||||
|
||||
logger.info("recalculating Kyu/Dan points for %s...", self.user)
|
||||
logger.info(
|
||||
"recalculating Kyu/Dan points for %s since %s...",
|
||||
self.user, str(hanchan_start)
|
||||
)
|
||||
self.update_rank()
|
||||
valid_hanchans = Hanchan.objects.confirmed_hanchans(user=self.user)
|
||||
valid_hanchans = valid_hanchans.order_by('start')
|
||||
if self.legacy_date:
|
||||
valid_hanchans = valid_hanchans.filter(start__gt=self.legacy_date)
|
||||
""" TODO: Hanchan Punkte nur neu berechnen wenn sie vor hachan_start
|
||||
lag. Es müssen aber alle durch die Schleife rennen, damit die Punkte
|
||||
richtig gezählt werden."""
|
||||
if hanchan_start:
|
||||
valid_hanchans = valid_hanchans.filter(start__gte=hanchan_start)
|
||||
self.hanchan_count += valid_hanchans.count()
|
||||
for hanchan in valid_hanchans:
|
||||
logger.debug('Update Kyu/Dan points for Hanchan started on %s', str(hanchan.start))
|
||||
hanchan.get_playerdata(self.user)
|
||||
hanchan.bonus_points = 0
|
||||
hanchan.player_comment = u""
|
||||
@@ -469,7 +475,7 @@ class KyuDanRanking(models.Model):
|
||||
self.won_hanchans += 1 if hanchan.placement == 1 else 0
|
||||
self.good_hanchans += 1 if hanchan.placement == 2 else 0
|
||||
hanchan.update_playerdata(self.user)
|
||||
hanchan.save(force_update=True)
|
||||
hanchan.save(recalculate=False)
|
||||
self.save(force_update=True)
|
||||
|
||||
def update_hanchan_points(self, hanchan):
|
||||
@@ -537,7 +543,7 @@ class KyuDanRanking(models.Model):
|
||||
if self.dan_points > min_points:
|
||||
self.dan = dan_rank
|
||||
break
|
||||
if self.dan > old_dan:
|
||||
if old_dan == None or self.dan > old_dan:
|
||||
self.wins_in_a_row = 0
|
||||
elif self.kyu_points < 1:
|
||||
self.kyu_points = 0
|
||||
@@ -600,10 +606,16 @@ class SeasonRanking(models.Model):
|
||||
|
||||
def update_ranking(sender, instance, **kwargs):
|
||||
for user in (instance.player1, instance.player2, instance.player3, instance.player4):
|
||||
logger.debug("marking %s's kyu/dan for recalculation", user)
|
||||
set_dirty(user=user.id)
|
||||
logger.debug(
|
||||
"marking %(user)s's kyu/dan for recalculation since %(start)s",
|
||||
{'user':user, 'start':str(instance.start.date())}
|
||||
)
|
||||
set_dirty(user=user.id, hanchan_date=instance.start.date())
|
||||
if instance.season:
|
||||
logger.debug("marking %s's ladder %i season for recalculation.", user, instance.season)
|
||||
logger.debug(
|
||||
"marking %s's ladder %i season for recalculation.",
|
||||
user, instance.season
|
||||
)
|
||||
set_dirty(user=user.id, season=instance.season)
|
||||
logger.debug("marking season %d for recalculation.", instance.season)
|
||||
set_dirty(season=instance.season)
|
||||
@@ -611,4 +623,4 @@ def update_ranking(sender, instance, **kwargs):
|
||||
set_dirty(event=instance.event_id, user=user.id)
|
||||
|
||||
models.signals.pre_delete.connect(update_ranking, sender=Hanchan)
|
||||
models.signals.post_save.connect(update_ranking, sender=Hanchan)
|
||||
# models.signals.post_save.connect(update_ranking, sender=Hanchan)
|
||||
|
||||
Reference in New Issue
Block a user