将计算值保存为模型字段

问题描述 投票:0回答:2

作为我早期的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)??任何提示都很好。

django django-models
2个回答
0
投票

get_player_points()是一种方法,需要括号。

'TournamentStandings' object has no attribute 'get_player_points'

0
投票

为我的问题发布一个有效的解决方案。不需要括号。

首先我修复了锦标赛模型,所以我可以将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

这有效!我对改进的任何想法都很好。

© www.soinside.com 2019 - 2024. All rights reserved.