Django:列出一个字段组合其所有唯一值的所有内容

时间:2017-12-06 21:25:27

标签: django django-templates django-views

我卡住了。我遇到的问题是我想创建一个objects.all()列表,但是其中一个ForeignKey相同的所有对象应该合并到一个列表中的一个条目。

我的模特:

class TournamentStandings(models.Model):
    tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE)
    player = models.ForeignKey(Player, on_delete=models.CASCADE)
    player_place = models.FloatField(verbose_name=u"Place")

我想得到的清单是这样的:

ID |播放器|比赛|地点 1 | Name_1 | Tournament_1,Tournament_2 | Place_on_tournament_1,P_o_t_2 2 | Name_2 | Tournament_1,Tournament_2 | Place_on_tournament_1,P_o_t_2

因此ForeignKey(Player)将是我想要限制和组合条目的那个。我尝试了objects.all()的通用视图和模板中的循环:

{% for player in ranking_list %}
  <tr>
    <td>{{ ranking_list.id }}</td>
    <td>{{ ranking_list.player }}</td>
    <td>{{ ranking_list.tournament }}</td>
    <td> {{ ranking_list.player_place }} </td>
  </tr>
{% endfor %}

它不起作用。任何提示??

2 个答案:

答案 0 :(得分:1)

在您的查询中添加order_by,以便同一玩家的排名是连续的,并将结果传递到itertools.groupby以获取“子列表”(同一玩家的所有排名组合在一起)。然后,您可以以任何您喜欢的方式处理/格式化。

答案 1 :(得分:0)

我使用了一点点不同的方法。 我在views.py中使用了注释:

    ranking_list = TournamentStandings.objects.values('player__name').annotate(Sum('player_points'))
return render(request, 'rankings.html', {'ranking_list': ranking_list})

然后在我的模板中,我会显示包含player__nameplayer_points_sum的列。排序由模板中的webstack_django_sorting完成,因此用户可以通过列来决定他们想要显示结果的顺序。

template.html:

{% load sorting_tags %}
<table class="table table-bordered">
<thead>
<tr>
  <th>{% anchor player__name _("Gracz") %}</th>
  <th>{% anchor player_points__sum _("Punkty") %}</th>
</tr>
</thead>
{% load static %}
<tbody>
{% autosort ranking_list %}
{% for ranking_list in ranking_list %}
  <tr>
    <td>{{ ranking_list.player__name }}</td>
    <td> {{ ranking_list.player_points__sum }} </td>

  </tr>
{% endfor %}
</tbody>
</table>