Есть 2 модели:
1 - это средний рейтинг игры и сама игра соответственно.
Хочется, чтобы при каждой новой оценке пользователя, средний рейтинг обновлялся
Для этого условно написана функция new_avg. Как мне отслеживать, что пользователь ставит новую оценку и автоматом вызывать функцию new_avg?
В качестве пользователя использую стандартного джангового юзера
class AvgRating(models.Model):
avg = models.FloatField(default=0)
all = models.IntegerField(default=0)
def __init__(self, rate = 0):
self.avg = rate
self.all = 1
def new_avg(self, prev_avg, prev_all, rate):
self.all = prev_all + 1
self.avg = (prev_avg * prev_all + rate) / self.all
return self.avg
class Game(models.Model):
Rate = (
('1 star', 1),
('2 stars', 2),
('3 stars', 3),
('4 stars', 4),
('5 stars', 5),
)
rating = models.CharField(max_length=7, choices=Rate)
title = models.CharField(max_length=100, default='Mario')
publisher = models.CharField(max_length=100, null=True)
developer = models.CharField(max_length=100, null=True)
avg = models.ForeignKey(AvgRating, on_delete=models.CASCADE, default=0)
def __str__(self):
return self.title + " " + str(self.rating)