2016-04-14 16 views
1

私はこれらの単純なモデルをDjangoに持っています。 acc1acc2の2つのアカウントがある場合、両方が同じチームに参加しているかどうかを判断する最良の方法は何ですか?私はこれを可能な限り簡潔に保つために努力しています(これはラムダで名前付き変数ではないためです)。多くの子オブジェクトがDjangoで親を共有しているか確認してください

class Team(models.Model): 
    members = models.ManyToManyField(Account, through='Participation') 

class Participation(models.Model): 
    team = models.ForeignKey(Team, on_delete=models.CASCADE) 
    account = models.ForeignKey(Account, on_delete=models.CASCADE) 

これまでのところ、私が持っているもの:

def are_in_same_team(acc_pk1, acc_pk2): 
    teams = Team.objects.filter(participation__account__id__in=[acc_pk1, acc_pk2]) 
    return (acc_pk1 == acc_pk2 and len(teams) == 1) or (len(teams) == 2 and teams[0] == teams[1]) 
+0

acc1.teamを返す '試しください== acc2.team' – xbello

+0

アカウントには多くのチームが存在する可能性があるため、オブジェクトには 'team_set'があります。あなたが示唆していることはできません。 – Crossfire

答えて

2

をメンバーの両方を持っているチームが存在するかどうかをチェックできます。

def are_in_same_team(acc_pk1, acc_pk2): 
    return Team.objects.filter(members__id=acc_pk1).filter(members__id=acc_pk2).exists() 
+0

これは実際に動作します!ありがとうございました。 – Crossfire

+0

助けになるのはうれしい! – AKS

関連する問題