Я пытаюсь передать результат из функции суммирования в другой объект после его сохранения. Однако каждый раз, когда я изменяю значение, сохраняющее объект, результат набора запросов агрегации суммы будет неверным. Как мне правильно сделать это?
class Team(models.Model):
total = models.PositiveSmallIntegerField(default=0)
class Player(models.Model):
team = models.ForeignKey(Team, on_delete=models.CASCADE)
score = models.PositiveSmallIntegerField(default=0)
def save(self, *args, **kwargs)
super(Player, self).save(*args, **kwargs)
# new_total value does not get updated.
new_total = Player.objects.filter(team=self.team).aggregate(Sum('score')).get('score__sum')
Team.objects.filter(id=self.team.id).update(total=new_total)
print(new_total) # if I'm saving a new value of 15, this will still print 10
@receiver(post_save, sender=Player)
def sum(sender, instance, **kwargs):
# new_total_attempt_two value does not get updated either.
new_total_attempt_two = sender.objects.filter(squad=instance.squad).aggregate(Sum('score')).get('score__sum')
print(new_total_attempt_two) # if I'm saving a new value of 15, this will still print 10
Если у меня есть существующий объект со счетом 10 и я изменяю его на 15, я ожидаю, что общее количество в модели команды будет обновлено до 15, но оно все равно 10.
Я использую Python 3.6, Django 2.1.7.
Я также пытался использовать сигналы post_save, но также не увенчался успехом.