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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django:列出一个字段组合其所有唯一值的所有内容相关的知识,希望对你有一定的参考价值。

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

它没用。任何提示?

答案

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

另一答案

我使用了一点点不同的方法。我在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>

以上是关于Django:列出一个字段组合其所有唯一值的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Access如何计算一个值及其在字段中列出的所有排列的次数?

如何在 Django 中列出所有与表单相关的错误?

Django 验证列组合是不是存在(具有布尔字段的唯一性)

在 Django 中强制使用唯一的字段组合

如何从用户在 django 基本模板中创建的所有帖子中获取模型字段值的总和?

R-查找值的唯一排列