Python 如何在Django中求一个字段的和
如何呈现特定字段值的总计?正如您所看到的,我在这里使用的是反向关系,因为我有一个外键(我不确定这是否有区别)。例如,如果我想要Python 如何在Django中求一个字段的和,python,django,Python,Django,如何呈现特定字段值的总计?正如您所看到的,我在这里使用的是反向关系,因为我有一个外键(我不确定这是否有区别)。例如,如果我想要'ab'字段中的值的总和,我会怎么做。我知道我必须使用聚合或注释方法。在我的特殊情况下会是什么样子 型号.py class Batting(models.Model): id = models.IntegerField(db_column='ID', primary_key=True) playerid = models.ForeignKey('Playe
'ab'
字段中的值的总和,我会怎么做。我知道我必须使用聚合或注释方法。在我的特殊情况下会是什么样子
型号.py
class Batting(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True)
playerid = models.ForeignKey('PlayerLkup', models.DO_NOTHING, db_column='playerID', blank=True, null=True)
g = models.IntegerField(db_column='G', blank=True, null=True
ab = models.IntegerField(db_column='AB', blank=True, null=True)
year = models.IntegerField(db_column='Year', blank=True, null=True)
complete_name = models.CharField(max_length=50, blank=True, null=True)
class PlayerLkup(models.Model):
playerid = models.CharField(db_column='playerID', primary_key=True, max_length=255)
birthday = models.IntegerField(db_column='birthDay', blank=True, null=True)
namefirst = models.CharField(db_column='nameFirst', max_length=255, blank=True, null=True)
namelast = models.CharField(db_column='nameLast', max_length=255, blank=True, null=True)
from django.shortcuts import render
from .models import PlayerLkup
def player_info(request, playerid):
playerdata = PlayerLkup.objects.get(playerid=playerid)
battingstats = playerdata.batting_set.all()
return render(request, 'careerstats/playerpage.html', {'playerdata': playerdata, 'battingstats': battingstats})
视图.py
class Batting(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True)
playerid = models.ForeignKey('PlayerLkup', models.DO_NOTHING, db_column='playerID', blank=True, null=True)
g = models.IntegerField(db_column='G', blank=True, null=True
ab = models.IntegerField(db_column='AB', blank=True, null=True)
year = models.IntegerField(db_column='Year', blank=True, null=True)
complete_name = models.CharField(max_length=50, blank=True, null=True)
class PlayerLkup(models.Model):
playerid = models.CharField(db_column='playerID', primary_key=True, max_length=255)
birthday = models.IntegerField(db_column='birthDay', blank=True, null=True)
namefirst = models.CharField(db_column='nameFirst', max_length=255, blank=True, null=True)
namelast = models.CharField(db_column='nameLast', max_length=255, blank=True, null=True)
from django.shortcuts import render
from .models import PlayerLkup
def player_info(request, playerid):
playerdata = PlayerLkup.objects.get(playerid=playerid)
battingstats = playerdata.batting_set.all()
return render(request, 'careerstats/playerpage.html', {'playerdata': playerdata, 'battingstats': battingstats})
您可以尝试以下方式进行聚合
from django.db.models import Sum
result = Batting.objects.aggregate(sum_of_ab=Sum("ab"))
print result["sum_of_ab"]
要获取与特定播放机关联的所有ab
字段的总和,可以先修改查询以进行筛选
from django.db.models import Sum
playerdata = PlayerLkup.objects.get(playerid=playerid)
result = Batting.objects.filter(playerid=playerdata).aggregate(sum_of_ab=Sum("ab"))
print result["sum_of_ab"]
这就是你的意思吗?击球模型中每个物体的所有AB整数之和
from django.shortcuts import render
from .models import PlayerLkup, Batting
def player_info(request, playerid):
count = 0
foo = Batting.objects.filter(playerid=playerid)
for x in foo:
count += int(x.ab)
return render(request, 'careerstats/playerpage.html', {'playerdata': playerdata, 'battingstats': battingstats, 'count':count})
文档中有一个注释示例可能适合这里-
total_ab = PlayerLkup.objects.get(playerid=playerid).annonate(total_ab=Sum('batting__ab'))
(警告!)我还没有测试过这个
查看示例以了解更多信息
player = PlayerLkup.objects.get(playerid='FILL IN ID OF PLAYER HERE')
player_abs = Batting.objects.filter(playerid=player).values('ab')
我很确定,只要检索一个值,就不需要执行SUM或COUNT之类的任何操作
此外,您可能会混淆外键和多对多
您的观点可以是:
def player_info(request, playerid):
player = PlayerLkup.objects.get(playerid=playerid)
player_stats = Batting.objects.get(playerid=player)
player_abs = player_stats.ab
# below line should be same value as above
player_abs = Batting.objects.filter(playerid=player).values('ab')
context = {
'player': player,
'player_stats': player_stats,
'player_abs': player_abs
}
return render(request,'careerstats/playerpage.html', context)