2017-10-10 16 views
1

私はTeamと呼ばれる、勝敗のクラスを持っています。
win_pctでチームを並べ替えることができます。これは、ゲームの総数に対する勝ちの割合(つまり、wins.count()/(wins.count() + losses.count()))でなければなりません。派生計算によってオブジェクトをソートする方法は?

class Team(TimestampModerated): 
    name = models.CharField(max_length=80, blank=False, null=False) 
    wins = models.ManyToManyField('self', blank=True, symmetrical=False, related_name='related_wins') 
    losses = models.ManyToManyField('self', blank=True, symmetrical=False, related_name='related_losses') 

    def num_wins(self): 
     return self.wins.count() 

    def num_losses(self): 
     return self.losses.count() 

    def win_pct(self): 
     return self.wins.count()/(self.wins.count() + self.losses.count()) 

だから、私の見解で、私はこのようなものがあります:

@list_route 
def teams_list(self, request): 
    teams = Team.objects.all().order_by('-win_pct') 
    page = self.paginate_queryset(teams) 
    if page is not None: 
     serializer = self.get_serializer(page, many=True) 
     return self.get_paginated_response(serializer.data) 
    serializer = self.get_serializer(teams, many=True) 
    return Response(
     data=serializer.data 
    ) 

をしかし、それは単にエラーを与える:

django.core.exceptions.FieldError: Cannot resolve keyword 'win_pct' into a field. Choices are: created, id, losses, moderation_code, related_losses, related_wins, name, updated, wins 

答えて

0

コード

from django.db.models import Count 
teams = Team.objects.all().annotate(
    win_pct=(Count('wins')/(Count('wins')+Count('losses')))).order_by('win_pct') 
の下に試してみてください
関連する問題