使用 Django 查询计算过滤列值的总和时出错

Posted

技术标签:

【中文标题】使用 Django 查询计算过滤列值的总和时出错【英文标题】:Error in Calculating the sum of a filtered column value using Django Queries 【发布时间】:2020-12-25 01:02:46 【问题描述】:

我有 2 个模型

class Horses(models.Model):
race = models.IntegerField(null=True)
name = models.CharField(max_length=200, null=True)
owners = models.ManyToManyField(Owners)

class BetOrders(models.Model):
customers =models.ForeignKey(Customers, null = True, on_delete=models.SET_NULL)
horses = models.ForeignKey(Horses, null = True, on_delete=models.SET_NULL)
amountBet = models.FloatField(null = True)
horseprice = models.IntegerField(null=True)
timeOfBet = models.DateTimeField(auto_now_add = True, null = True)

我正在尝试根据相似的马名计算amountBet 的总和。 我已经尝试过这个查询集,但没有成功

BetOrders.objects.filter(horses__name='white river').annotate(total_sales=Sum('amountBet'))

我可以知道这个查询有什么问题吗?以及获得过滤值总和的正确方法是什么。 注意:马名是 FK。 这是我的表的表示

+-------+------------------+
| Horse Name  | Amount Bet |
+-------------+------------+
| jals jiger  |    50      |
| white river |    80      |
| white river |    70      |
| jals jiger  |    10      |
| jals jiger  |    98      |
| chivas      |    10      |
+-------------+------------+

【问题讨论】:

【参考方案1】:

在进行 Group By 查询时,您需要使用 .values() 和 .annotate() 来触发“Group By”。试试下面的:

BetOrders.objects.values('horses__name').annotate(total_sales=Sum('amountBet')).filter(horses__name='white river')

【讨论】:

以上是关于使用 Django 查询计算过滤列值的总和时出错的主要内容,如果未能解决你的问题,请参考以下文章

通过具有最大列值的记录过滤 Django 查询

是否可以通过 Spark 中的值的总和来过滤列?

Hive 查询以使用其他列值的总和获取前 3 列值

使用 Django ORM 注释查询以计算 2 个表值的总和

Django ORM分别查询正负值的总和

Laravel 查询,其中列值大于相关模型列值的总和