Сумма значений полей не возвращает правильное значение после сохранения объекта - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь передать результат из функции суммирования в другой объект после его сохранения. Однако каждый раз, когда я изменяю значение, сохраняющее объект, результат набора запросов агрегации суммы будет неверным. Как мне правильно сделать это?

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, но также не увенчался успехом.

1 Ответ

1 голос
/ 08 апреля 2019

попробуйте это:

self.team.total = new_total
self.team.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...