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

  1. 这个导入到哪里去了?在models.py?或 views.py?

total = Tally.objects.aggregate(Sum("field_name"))

  1. 我应该把这个函数放在哪里?

  2. 我使用哪个 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;