Как суммировать значения из разных объектов в Django?
Я хочу вычислить объем тренировок каждого пользователя, а затем добавить его, чтобы я мог использовать значение в chart.js.
Этот показатель рассчитывается путем умножения reps
, series
и weight
всех упражнений во всех тренировках пользователя.
У меня есть следующие модели:
class Exercise(models.Model):
exercise = models.CharField(max_length=166)
series = models.IntegerField(null=True, validators=[RegexValidator(r'^[0-9]*$')])
reps = models.IntegerField(null=True, validators=[RegexValidator(r'^[0-9]*$')])
weight = models.DecimalField(max_digits=5, decimal_places=1, null=True, blank=True)
class Workout(models.Model):
member = models.ForeignKey(Member, on_delete=models.CASCADE)
day = models.CharField(max_length=1, blank=True, null=True, verbose_name="Dias")
exercises = models.ManyToManyField(Exercise, blank=True)
Чтобы попытаться рассчитать объем тренировки, я использовал следующие представления:
data = []
workout = Workout.objects.filter(member=request.user.member)
for p in workout:
exercise = p.exercises.aggregate(total=Sum(F('reps') * F('series') * F('weight'))).values()
for d in exercise:
data.append(d)
В свою очередь, возвращается сумма каждого отдельного дня. Таким образом, если у пользователя 2 тренировки, он вернет (пример) ["4350.0", "7350.0"]
Как я могу вычислить сумму всех дней. Таким образом, в случае данного примера окончательное значение будет ["11700.0"]
.
Надеюсь, это даст вам ожидаемый результат,
result = Exercise.objects.filter(
workout__member=request.user.member
).aggregate(
total=Sum(F('reps') * F('series') * F('weight'))
)