Django 中的 SUM 列
SUM columns in Django
我有一个简单的模型,它收集数据(特别是整数)以在 table 中显示选举结果。我有 2 个区域(当然更多,但我们现在说两个),数据将来自这些区域。我想显示每个区域和每个区域的总数,然后在 table
的底部显示 SUM
我的基础模型如下;
class Results(models.Model)
region_number = models.Foreignkey(Regions)
region_name = models.Charfield()
polling_station = models.Charfield()
party1 = models.IntegerField()
party2 = models.IntegerField()
party3 = models.IntegerField()
那我有两个class继承
class GeneralElections(Results)
pass
class RegionalElections(Results)
pass
我希望模板中的打印输出看起来像这样
---------------------------------
regions party1 party2 party3
---------------------------------
1 20 40 60
2 20 80 100
---------------------------------
Total 80 120 160 <------- More Importantly This!
---------------------------------
此外,我希望能够显示
的摘要页面
General Elections
-----------------------
party1 party2 party3
-----------------------
80 120 160
Regional Elections
-----------------------
party1 party2 party3
-----------------------
50 85 210
到目前为止,我已经能够完成所有事情,除了能够在 table
底部打印每列的总和
我看过的所有地方都说使用 django 聚合。但是,说明有点含糊。也许因为我是初学者。例如,我很困惑将各自的代码放在哪里。
from django.db.import SUM
- 这个导入到哪里去了?在models.py?或 views.py?
total = Tally.objects.aggregate(Sum("field_name"))
我应该把这个函数放在哪里?
我使用哪个 field_name?我想要 SUM 的是多个字段名称。双方各一份
如果之前有人回答过这个问题,我深表歉意,但我时间有限,我找不到任何关于此的详细信息。
如果有人能为我指明正确的方向并为我节省大量时间,我将不胜感激,因为我需要在几个小时内在线获取此应用程序。
提前致谢!
对于每个字段的总和,您可以使用类似的东西:
from django.db.models import Sum
agrregated_results = Results.objects.filter(# if you have any).agrregate(Sum('party1'), Sum('party2'), Sum('party3'))
party1_sum = agrregated_results['party1__sum'] or 0
... # same for other fields
区域摘要页面:
region_summary = Results.objects.values('region_number').annotate(party1_sum=Sum('party1'), party2_sum=Sum('party2'), party3_sum=Sum('party3')).order_by()
,其中.values(...).annotate(...).order_by()
翻译成:
SELECT fields_in_values_plus_annotation FROM table_name GROUP BY fields_in_values ORDER BY NULL;
我有一个简单的模型,它收集数据(特别是整数)以在 table 中显示选举结果。我有 2 个区域(当然更多,但我们现在说两个),数据将来自这些区域。我想显示每个区域和每个区域的总数,然后在 table
的底部显示 SUM我的基础模型如下;
class Results(models.Model)
region_number = models.Foreignkey(Regions)
region_name = models.Charfield()
polling_station = models.Charfield()
party1 = models.IntegerField()
party2 = models.IntegerField()
party3 = models.IntegerField()
那我有两个class继承
class GeneralElections(Results)
pass
class RegionalElections(Results)
pass
我希望模板中的打印输出看起来像这样
---------------------------------
regions party1 party2 party3
---------------------------------
1 20 40 60
2 20 80 100
---------------------------------
Total 80 120 160 <------- More Importantly This!
---------------------------------
此外,我希望能够显示
的摘要页面 General Elections
-----------------------
party1 party2 party3
-----------------------
80 120 160
Regional Elections
-----------------------
party1 party2 party3
-----------------------
50 85 210
到目前为止,我已经能够完成所有事情,除了能够在 table
底部打印每列的总和我看过的所有地方都说使用 django 聚合。但是,说明有点含糊。也许因为我是初学者。例如,我很困惑将各自的代码放在哪里。
from django.db.import SUM
- 这个导入到哪里去了?在models.py?或 views.py?
total = Tally.objects.aggregate(Sum("field_name"))
我应该把这个函数放在哪里?
我使用哪个 field_name?我想要 SUM 的是多个字段名称。双方各一份
如果之前有人回答过这个问题,我深表歉意,但我时间有限,我找不到任何关于此的详细信息。
如果有人能为我指明正确的方向并为我节省大量时间,我将不胜感激,因为我需要在几个小时内在线获取此应用程序。
提前致谢!
对于每个字段的总和,您可以使用类似的东西:
from django.db.models import Sum
agrregated_results = Results.objects.filter(# if you have any).agrregate(Sum('party1'), Sum('party2'), Sum('party3'))
party1_sum = agrregated_results['party1__sum'] or 0
... # same for other fields
区域摘要页面:
region_summary = Results.objects.values('region_number').annotate(party1_sum=Sum('party1'), party2_sum=Sum('party2'), party3_sum=Sum('party3')).order_by()
,其中.values(...).annotate(...).order_by()
翻译成:
SELECT fields_in_values_plus_annotation FROM table_name GROUP BY fields_in_values ORDER BY NULL;