使用 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 查询计算过滤列值的总和时出错的主要内容,如果未能解决你的问题,请参考以下文章