检查Django中是否有多对子对象共享父对象

时间:2016-04-14 08:00:07

标签: python django orm

我在Django中有这些简单的模型。鉴于两个帐户acc1acc2,了解他们是否同时参与同一个团队的最佳方式是什么?我试图尽可能简洁(因为这是一个lambda,没有命名变量)。

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

1 个答案:

答案 0 :(得分:3)

您可以检查是否存在具有两个成员的团队:

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