Като продължение на предишния ми въпрос имам нов. Как мога да запазя тази изчислена стойност като поле за модел. Бих искал да го използвам в моите изгледи и шаблони, за да подредя списъка по това поле.
Моите модели:
class Tournament(models.Model):
name = models.CharField(max_length=100)
date = models.DateTimeField('date')
player_num = models.IntegerField(verbose_name="")
points = models.FloatField(default=1000.00)
def get_rating(self):
return self.points / 1000.00
class TournamentStandings(models.Model):
tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE)
player = models.ForeignKey(Player, on_delete=models.CASCADE)
player_place = models.FloatField(verbose_name=u"")
player_points = models.FloatField(verbose_name="",
blank=True) #added for testing to save the calculated value in it
@property
def get_player_points(self, obj):
return obj.tournament.player_num * obj.tournament.get_rating() -
obj.tournament.get_rating()*(obj.player_place - 1.00)
def save(self, *args, **kwargs):
self.player_points = self.get_player_points
super(TournamentStandings, self).save(*args, **kwargs)
def __float__(self):
return self.player_points
Странно, тъй като в списъка с администратори имам колона, в която player_points
се изчисляват правилно, но когато добавя нов екземпляр на модела и се опитвам да го запазя, получавам тази грешка: 'TournamentStandings' object has no attribute 'get_player_points'
. Причината ли е, че се опитвам да направя „самостоятелно“ запазване и изчислението ми е (self, obj) ?? Всякакви съвети са добре дошли.