【发布时间】:2018-01-13 06:44:39
【问题描述】:
我再次需要你的帮助。我正在为我的兵棋推演小组做一个项目。这是一个简单的排名网站。所以我们有球员,他们参加比赛并获得积分。我已经到了可以将球员分配到锦标赛的地步,将他们在锦标赛中的位置分配给他们的名字。
现在我必须计算积分。算法很简单,但我在将值从 Tournament 模型传递到 Ranking 时遇到问题。每个锦标赛都有一个计算的评分(基于其他因素,主要是更大的锦标赛,更高的评分),在其他模型中,我无法使用它,需要你的帮助。最重要的是,如果更改锦标赛中的评分值会强制更新所有相关计算,那就太棒了。
所以我们有这样的模型:
class Player(models.Model):
class Meta:
name = models.CharField(max_length=50)
nicname = models.CharField(max_length=50,blank=True)
army = models.CharField(max_length=50)
def __unicode__(self):
return self.name
def __str__(self):
return self.name
class Tournament(models.Model):
class Meta:
name = models.CharField(max_length=100)
date = models.DateTimeField('date')
player_num = models.IntegerField
points = models.FloatField(default=1000.00)
def __unicode__(self):
return self.name
def __str__(self):
return self.name
然后我有一个这样的排名模型:
class TournamentStandings(models.Model):
tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE)
player = models.ForeignKey(Player, on_delete=models.CASCADE)
player_place = models.FloatField
在 admin.py 中我为 TournamentAdmin 进行计算:
fields = ['name', 'date', 'player_num', 'points', 'get_rating']
def get_rating(self, obj):
return obj.points / 100.00
现在我想为 TournamentStandingsAdmin 进行计算:
def player_points(self, obj):
return (obj.tournament.player_num/obj.player_place)* obj.tournament.get_rating
但是结果是错误的
“Tournament”对象没有“get_rating”属性
所以我的猜测是我计算的 get_rating 不是真正的模型字段,但如何解决这个问题?
【问题讨论】:
-
如果你想在模型上调用方法,那么你需要在模型上实际定义它,而不是在管理类上。
标签: python django django-models django-admin