2017-08-05 10 views
0

私はもう一度あなたの助けが必要です。私はwargamingグループのプロジェクトに取り組んでいます。それは簡単なランキングサイトです。だから我々は選手を​​持っている、彼らはトーナメントに参加し、ポイントを取得します。トーナメントにプレーヤーを割り当て、トーナメントで行った場所を自分の名前に割り当てることができるようになった。計算値に基づくジャンゴの計算

ポイントを計算する必要があります。アルゴリズムは簡単ですが、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 

をそして私は、この種のランキングモデルがあります:admin.pyで

class TournamentStandings(models.Model): 
    tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE) 
    player = models.ForeignKey(Player, on_delete=models.CASCADE) 
    player_place = models.FloatField 

私は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 

しかし、結果がエラーである

「大会」オブジェクトが

は、だから私の推測では、私の計算をされていないget_rating真のモデルのフィールドである「get_rating」は属性を持っていませんが、それを回避するには?

+0

あなたがモデルにメソッドを呼び出したい場合は、あなたは、実際にモデルに、それを定義する必要はありません管理クラスで –

答えて

2

@ダニエルは、Tournamentモデルにget_ratingメソッドを追加する必要があることを示唆しています。

class Tournament(models.Model): 
    name = models.CharField(max_length=100) 
    date = models.DateTimeField('date') 
    player_num = models.IntegerField 
    points = models.FloatField(default=1000.00) 

    .... 
    def get_rating(self): 
     return obj.points/100.00 

次のようにTournamentオブジェクトとメソッドを呼び出すことができた後:

obj.tournament.get_rating 
関連する問題