计算子表 Django

Posted

技术标签:

【中文标题】计算子表 Django【英文标题】:Calculate Sub Table Django 【发布时间】:2021-11-21 09:14:16 【问题描述】:

我是 Django 新手,我尝试计算相关表的子表。 我有两个模型交易和细节。这是我的模型:

    class Transaction(models.Model):
        id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
        code = models.CharField(max_length=50)

    class Detail(models.Model):
        id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
        transaction = models.ForeignKey(Transaction, related_name='details', on_delete=models.CASCADE)
        qty = models.DecimalField(max_digits=10, decimal_places=2, null=False, blank=False)
        price = models.DecimalField(max_digits=10, decimal_places=2, null=False, blank=False)

我想在这样的单个查询中获得计算总和 (Detail.qty * Detail.price):

datas = Transaction.objects.all().annotate(sum=sum(qty*price))

如何在 Django ORM 上做到这一点?

【问题讨论】:

【参考方案1】:

您可以在 Django 中通过组合使用 FSum 来实现此目的。

detail__ 允许您访问外键 Detail

from django.db.models import F, Sum

datas = Transaction.objects.annotate(sum=Sum(F('detail__qty')* F('detail__price')))

【讨论】:

F 是什么意思? 表示字段的值。 docs.djangoproject.com/en/3.2/ref/models/expressions/… 哦,谢谢,我猜它是一个浮点值。 现在已经解决了。谢谢你的回答。

以上是关于计算子表 Django的主要内容,如果未能解决你的问题,请参考以下文章

Firebasedatabase - 如何计算子节点

通过 UIElement.TranslatePoint 计算子元素中心偏离正确值

如何根据时间戳值计算子列表的平均值?

使用主查询的字段计算子查询中的字段

java例题_49 计算子串出现的次数

Python pandas 计算子字符串的唯一字符串源的数量