我有一个模型击球,它在特定球员中有统计数据。玩家信息在Master中,与Batting中的外键相关。
class Batting(models.Model):
player = models.ForeignKey(Master)
year = models.IntegerField()
homeruns = models.IntegerField()
...
def __unicode__(self):
#return "%s %s %s" % (self.player.name_first, self.player.name_last, self.team)
return "%s %s" % (self.player.name_first, self.player.name_last)
class Master(models.Model):
id = models.CharField(max_length=30, primary_key=True)
name_first = models.CharField(max_length=30)
name_last = models.CharField(max_length=30, db_index=True)
...
def __unicode__(self):
return "%s %s" % (self.name_first, self.name_last)
我有两个问题:
home_runs = Batting.objects.filter(year=max_year['year__max']).order_by('-homeruns')[:20]
home_runs_all_time = Batting.objects.values('player').annotate(hrs=Sum('homeruns')).order_by('-hrs')[:20]
第一个列出了2013年的20个本垒打击球手。第二个是.values()和.annotate()来产生每个玩家的Homeruns总和并列出它们。第一个在我的模板中正常工作:
<h2>Most Home Runs in a Season -- {{ year }}</h2>
<table>
<tr>
<th>Name</th>
<th>Homeruns</th>
</tr>
{% for p in home_runs %}
<tr>
<td>{{ p }}</td><td>{{p.homeruns}}</td>
</tr>
{% endfor %}
</table>
<h2>Most Home Runs All Time</h2>
<table>
<tr>
<th>Name</th>
<th>Homeruns</th>
</tr>
{% for p in home_runs_all_time %}
<tr>
<td>{{ p.player }}</td><td>{{p.hrs}}</td>
</tr>
{% endfor %}
</table>
但是第二个中的html打印FK id而不是名称: 大多数家庭在一个季节运行 - 2013年
Name Homeruns
Chris Davis 53
Miguel Cabrera 44
Pedro Alvarez 36
Edwin Encarnacion 36
大多数家庭一直运行
Name Homeruns
bondsba01 762
aaronha01 755
如何让第二个查询从Master表而不是键中返回 unicode 值?
答案 0 :(得分:2)
我认为你应该尝试:
home_runs_all_time = Batting.objects.values('player__name_first', 'player__name_last').annotate(hrs=Sum('homeruns')).order_by('-hrs')[:20]
模板中的:
<h2>Most Home Runs All Time</h2>
<table>
<tr>
<th>Name</th>
<th>Homeruns</th>
</tr>
{% for p in home_runs_all_time %}
<tr>
<td>{{ p.player__name_first }} {{ p.player__name_last }}</td><td>{{p.hrs}}</td>
</tr>
{% endfor %}
</table>
答案 1 :(得分:0)
我找到了解决方案:
Batting.objects.values('player', 'player__name_first', 'player__name_last').annotate(category=Sum(category_name)).order_by('-category')[:20]
3个值参数标识表中的唯一人。 category_name是一个字段。我很幸运,在这种情况下,所有三个值都是唯一的,我想显示名称,即使玩家(这是一个外键)足以识别分组