2017-12-06 7 views
0

私は立ち往生しました。私が持っている問題は、objects.all()のリストを作成したいが、1つのForeignKeyが同じであるすべてのオブジェクトをリストの1つのエントリに結合する必要があるということです。 |Django:1つのフィールドがすべての固有の値を結合する場所をすべてリストします

ID:

マイモデル:

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") 

私が取得したいと思いリストはこのようなものですプレーヤー|トーナメント|場所 1 | Name_1 |トーナメント1、トーナメント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 %} 

これはうまくいきませんでした。どんなヒント?

答えて

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> 
1

同じプレイヤーの順位が連続するようにorder_byを追加し、その結果をitertools.groupbyに渡して「サブリスト」(同じプレイヤーのすべての順位がグループ化されている)を取得します。それで、好きな方法でそれらを処理/フォーマットすることができます。

+0

は、いわゆる "N + 1問題" を防ぐために 'select_related'を使用することを忘れないでください。 –

関連する問題