【发布时间】:2017-12-07 22:35:05
【问题描述】:
作为我之前的question 的后续行动,我有了一个新的。如何将此计算值保存为模型字段。我想在我的视图和模板中使用它来按此字段排序列表。
我的模型:
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) ?欢迎任何提示。
【问题讨论】:
标签: django django-models