Django:如何在 Django 中求和数字

Django: how to sum up numbers in django

我想计算总销售额并显示总价格,我不知道如何编写函数来执行此操作。我尝试在 models.py 中编写一个小函数来完成它,但它按预期工作。这就是我想要的,我有一个名为 UserCourse 的模型,它存储了所有购买的课程,现在我想计算并总结已售出的单个课程的所有价格。

models.py

class Course(models.Model):
    course_title = models.CharField(max_length=10000)
    slug = models.SlugField(unique=True)
    price = models.IntegerField(default=0)

class UserCourse(models.Model):
    user = models.ForeignKey(User , null = False , on_delete=models.CASCADE)
    course = models.ForeignKey(Course , null = False , on_delete=models.CASCADE)
    date = models.DateTimeField(auto_now_add=True)

以及我如何在 views.py 中过滤此模型,以便我可以显示特定创作者已售出的课程的总价。

您可以在您的视图中使用聚合功能:

from django.db.models import Sum

price_total = UserCourse.objects.filter(
        course__title="a title"
    ).aggregate(
       aggregate_price = Sum("course__price")
    )["aggregate_price"]

分解:

首先,我们过滤所有 UserCourse objects,其中课程的标题为“a title”

然后我们将它们汇总,找出过滤器选择的所有课程的课程价格总和

通过在我们的 Sum 表达式中命名一个变量,查询集现在将有一个命名值,我们可以通过名称 ['aggregate_price'] 获得并分配给 price_total

现在您可以通过上下文传递 price_total 以在您的模板中使用。

您可以指定其他过滤器来获取不同查询集的价格总计。因此,如果您的创建者是您的 UserCourse 模型中的用户字段,您可以使用 user__username = "my_username" 作为过滤器重复该过程

使用 aggregate 尝试这种方法,从特定 course 过滤所有 UserCourse 对象,然后 运行 该 course 的价格汇总]:

my_course = Course.objects.first()

total_amount_sold = UserCourse.objects.filter(
    course=my_course,
).aggregate(total_amount_sold=Sum("course__price"))["total_amount_sold"]