如何对 Django 中不同对象的值求和?
How to Sum values from different objects in 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)
这又是 return 每一天的总和。因此,如果用户有 2 次锻炼,它将 return(示例)["4350.0", "7350.0"]
如何计算所有天数的总和。因此,在本例中,最终值为 ["11700.0"]
.
我希望这会给你预期的结果,
result = Exercise.objects.filter(
workout__member=request.user.member
).aggregate(
total=Sum(F('reps') * F('series') * F('weight'))
)
我想计算每个用户的锻炼量,然后附加它,这样我就可以使用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)
这又是 return 每一天的总和。因此,如果用户有 2 次锻炼,它将 return(示例)["4350.0", "7350.0"]
如何计算所有天数的总和。因此,在本例中,最终值为 ["11700.0"]
.
我希望这会给你预期的结果,
result = Exercise.objects.filter(
workout__member=request.user.member
).aggregate(
total=Sum(F('reps') * F('series') * F('weight'))
)