Skip to main content
 首页 » 编程设计

python之检查 Django 中是否有许多子对象共享一个父对象

2024年08月23日26youxin

我在 Django 中有这些简单的模型。给定两个帐户 acc1 和 acc2,确定他们是否都参加同一个团队的最佳方法是什么?我尽量保持简洁(因为这是一个 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]) 

请您参考如下方法:

你可以检查是否存在一个拥有两个成员的团队:

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