作为我早期的qazxsw poi的后续版,我有一个新的。如何将此计算值保存为模型字段。我想在我的视图和模板中使用它来按此字段排序列表。
我的模特:
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
。是不是因为我试图做一个“自我”保存而我的计算是(self,obj)??任何提示都很好。
get_player_points()是一种方法,需要括号。
'TournamentStandings' object has no attribute 'get_player_points'
为我的问题发布一个有效的解决方案。不需要括号。
首先我修复了锦标赛模型,所以我可以将def save(self, *args, **kwargs):
self.player_points = self.get_player_points()
保存为一个字段:
get_rating
当我这样做时,我试图将它复制到第二个模型。问题是由于我在计算中调用的相关obj,我无法使其工作。但!我已设法将此值分配给class Tournament(models.Model):
name = models.CharField(max_length=100)
rating = models.FloatField(verbose_name="Rating", blank=True)
@property
def get_rating(self):
return (self.points) / (1000.00)
def save(self, *args, **kwargs):
self.rating = self.get_rating
super(Tournament, self).save(*args, **kwargs)
def __float__(self):
return self.rating
中的变量,现在所有这些都按预期工作:
get_player_points
这有效!我对改进的任何想法都很好。