Ich brauche deine Hilfe noch einmal. Ich arbeite an einem Projekt für meine Wargaming-Gruppe. Es ist eine einfache Ranking-Website. Also haben wir Spieler, sie nehmen an Turnieren teil und bekommen Punkte. Ich bin an dem Punkt angelangt, an dem ich Spieler zu Turnieren zuordnen kann und den Platz, den sie beim Turnier genommen haben, ihrem Namen zuordnen kann.Django Berechnung basierend auf berechneten Wert
Jetzt muss ich Punkte berechnen. Algorithmus ist einfach, aber ich habe Probleme, einen Wert von Tournament
Modell zu Ranking
zu übergeben. Jedes Turnier hat eine berechnete Bewertung (basierend auf anderen Dingen, meist größeres Turnier, größere Bewertung) und in anderen Modellen konnte ich es nicht benutzen und brauche deine Hilfe damit. Darüber hinaus wäre es großartig, wenn ein Rating-Wert in Tournament eine Aktualisierung aller abhängigen Berechnungen erzwingen würde.
So haben wir Modelle wie folgt aus:
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
Und dann habe ich ein Ranking-Modell dieser Art:
class TournamentStandings(models.Model):
tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE)
player = models.ForeignKey(Player, on_delete=models.CASCADE)
player_place = models.FloatField
In admin.py ich tun Berechnungen für TournamentAdmin:
fields = ['name', 'date', 'player_num', 'points', 'get_rating']
def get_rating(self, obj):
return obj.points/100.00
Und jetzt würde ich gerne Berechnung für TournamentStandingsAdmin machen:
def player_points(self, obj):
return (obj.tournament.player_num/obj.player_place)* obj.tournament.get_rating
Aber das Ergebnis ist ein Fehler
‚Tournament‘ Objekt hat kein Attribut ‚get_rating‘
Also meine Vermutung meine berechnet ist get_rating ist kein wahres Modellfeld aber wie geht das um?
Wenn Sie die Methode auf das Modell nennen wollen, dann müssen Sie es tatsächlich auf dem Modell definieren, nicht in der Admin-Klasse. –