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

问题描述 投票:0回答:2

我被困。我遇到的问题是我想创建一个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 %}

它没用。任何提示?

django django-templates django-views
2个回答
1
投票

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


0
投票

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

    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>
© www.soinside.com 2019 - 2024. All rights reserved.