2017-12-20 19 views
0

I次のモデルがあります:DjangoのORM関連分野でカウント

class Profile(models.Model): 
    pass 

class Team(models.Model): 
    ... 
    members = models.ManyToManyField("main.Profile", through='main.TeamMember') 

class TeamMember(models.Model): 
    profile = models.ForeignKey('Profile') 
    team = models.ForeignKey('Team') 
    role = models.CharField(max_length=255) 

だから、私は一定の役割とプロファイルの数によってチームを注文しよう、と私は動作しないクエリを、持っていました:

django.core.exceptions.FieldError: Related Field got invalid lookup: role 

役割はTeamMemberフィールドがあるので、プロフィールません:

Team.objects.filter(members__role='ExampleRole').annotate(example_role_count=Count('members')).order_by('example_role_count') 

これは、次の例外が発生します。だから、どのように指定された役割を持つメンバーの数で注文を達成できますか?

答えて

0

は最後に、解決策を見出した(のみジャンゴで動作を> = 1.11)

queryset = Team.objects.annotate(example_role_count=Subquery(TeamMember.objects.filter(role='example_role', team=OuterRef('pk')).values('team').annotate(cnt=Count('pk')).values('cnt'), output_field=IntegerField())).order_by('-example_role_count') 
0

あなたはモデルフィールド「を介して」でクエリセットをフィルタリングすると、関連するフィールドに基づいて、結果セットを注文したい場合カウント、

from django.db.models import Count 

# descending order 
Team.objects.filter(teammember__role='ExampleRole').annotate(example_role_count=Count('members')).order_by('-example_role_count') 
関連する問題