Как суммировать значения из разных объектов в Django?

#python #django #chart.js

Вопрос:

Я хочу рассчитать объем тренировки каждого пользователя, а затем добавить его, чтобы я мог использовать значение в 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]*

Чтобы попытаться рассчитать этот объем тренировки, я использовал следующее в представлениях:

 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"] .

Ответ №1:

Я надеюсь, что это даст вам ожидаемый результат,

 result = Exercise.objects.filter(  workout__member=request.user.member ).aggregate(  total=Sum(F('reps') * F('series') * F('weight')) )  

Комментарии:

1. Это прекрасно работает!

)]) reps = models.IntegerField(null=True, validators=[RegexValidator(r'^[0-9]*Чтобы попытаться рассчитать этот объем тренировки, я использовал следующее в представлениях:


Это, в свою очередь, возвращает сумму за каждый отдельный день. Итак, если у пользователя есть 2 тренировки, он вернется (пример) ["4350.0", "7350.0"]

Как я могу рассчитать сумму всех дней. Таким образом, в случае этого примера конечным значением будет ["11700.0"] .

Ответ №1:

Я надеюсь, что это даст вам ожидаемый результат,


Комментарии:

1. Это прекрасно работает!

)]) 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) Чтобы попытаться рассчитать этот объем тренировки, я использовал следующее в представлениях:


Это, в свою очередь, возвращает сумму за каждый отдельный день. Итак, если у пользователя есть 2 тренировки, он вернется (пример) ["4350.0", "7350.0"]

Как я могу рассчитать сумму всех дней. Таким образом, в случае этого примера конечным значением будет ["11700.0"] .

Ответ №1:

Я надеюсь, что это даст вам ожидаемый результат,


Комментарии:

1. Это прекрасно работает!