2017-12-06 4 views
0

막혔습니다. 문제는 내가 objects.all()의 목록을 만들고 싶지만 하나의 ForeignKey이 같은 모든 개체가 목록의 항목 하나와 결합되어야하는 곳입니다. |Django : 한 필드가 고유 한 값을 모두 결합한 곳을 모두 나열하십시오.

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 | 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 %} 

작동하지 않았다. 어떤 힌트?

답변

0

약간 다른 aproach를 사용했습니다. 내 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'를 사용하는 것을 잊지 마세요. –

관련 문제