Может надо **kwargs? Лучше доку по питону гляньте.
Спасибо! Решил проблему, кое-что упростив.
Вот тут ещё одна проблема вылезла. У меня есть класс модели:
#Модель класса партий
class Round(models.Model):
#ID партии
idr = models.AutoField(primary_key=True, db_index=True)
#Порядковый номер раунда в турнире
ordinal = models.PositiveSmallIntegerField()
#Связь с idt турнира
idtournament = models.ForeignKey(Tournament)
#Первый участник партии
idp1 = models.ForeignKey(Player, related_name="player1", blank=True, null=True )
#Второй участник партии
idp2 = models.ForeignKey(Player, related_name="player2", blank=True, null=True)
#Результат партии относительно player1
result = models.FloatField(blank=True, null=True, choices=GAME_RESULT)
#Партия закрыта, т.е. при значении "True" считать партию состоявшейся, "False" - партия ещё не сыграна
closed = models.BooleanField(default=False)
def __unicode__(self):
return "%s_#%s" %(self.idtournament.title, self.idr)
class Meta:
ordering = ['idtournament', 'ordinal']
def save(self, *args, **kwargs):
super(Round, self).save(*args, **kwargs)
if self.closed==True:
#Проверяем: все ли партии, которые относятся к данному турниру, закрыты.
closeRound = Round.objects.filter(idtournament=self.idtournament).exclude(closed=True)
#Обновление рейтинга игроков в чемпионате idtournament
if closeRound.count() < 1 :
#Выбираем все партии туринира idtournament раунда ordinal
roundsForClosed = Round.objects.filter(idtournament=self.idtournament, ordinal=self.ordinal)
#Персчитываем рейтинги игроков раунда
for currentRound in roundsForClosed:
#Выбираем коэффициент k
if currentRound.idp1.eol>2400:
kp1 = 10
if currentRound.idp2.eol<2400:
kp1 = 15
#Рассчитываем математическое ожидание количества очков, которое наберёт игрок player1 в партии с player2
eAp1 = 1 / ( 1 + 10**((currentRound.idp2.eol-currentRound.idp1.eol)/400))
#Рассчитываем новый регтинг игрока player1
newEol1 = currentRound.idp1.eol + kp1 * (self.result-eAp1)
currentRound.idp1.eol=newEol1
В самом конце есть функция сохранения в которой пересчитываются рейтинги игроков и первому из игроков каждой партий присваивается новый ретинг (currentRound.idp1.eol=newEol1). Проблема в том, что реально рейтинг не меняется. Я пробовал из другого класса менять рейтинг через метод save и он реально менялся, а тут нет. Подскажите, пожалуйста, в чём причина может быть. Либо подскажите с помощью чего вообще можно отлаживать код построчно?
Спасибо!