Django 查询集过滤掉具有共同成员的对象
Django queryset filtering out objects with common members
我正在创建两步表单。在第一部分中,队长选择他的一个团队,在第二部分中,我从第一步中检索选定的团队并基于它创建查询集。第二种形式应该只过滤与第一步中没有共同球员的球队。每队只有3名队员。
class Team(models.Model):
name = models.CharField(max_length=200, null=True, unique=True)
captain = models.ForeignKey(Player, on_delete=models.CASCADE, related_name="captain")
team_creation_date = models.DateTimeField(auto_now_add=True, null=True)
players = models.ManyToManyField(Player, through="PlayerTeam", related_name="players")
class PlayerTeam(models.Model):
player = models.ForeignKey(Player,on_delete=models.CASCADE)
team = models.ForeignKey(Team,on_delete=models.CASCADE)
join_date = models.DateField(auto_now_add=True)
不使用 Q 的一种解决方案是排除具有共同球员的球队。
selected_team = Team.objects.get(...) # get selected team
not_allowed_players = selected.team.players.all()
teams = Team.objects.all().exclude(players__in=not_allowed_players)
我正在创建两步表单。在第一部分中,队长选择他的一个团队,在第二部分中,我从第一步中检索选定的团队并基于它创建查询集。第二种形式应该只过滤与第一步中没有共同球员的球队。每队只有3名队员。
class Team(models.Model):
name = models.CharField(max_length=200, null=True, unique=True)
captain = models.ForeignKey(Player, on_delete=models.CASCADE, related_name="captain")
team_creation_date = models.DateTimeField(auto_now_add=True, null=True)
players = models.ManyToManyField(Player, through="PlayerTeam", related_name="players")
class PlayerTeam(models.Model):
player = models.ForeignKey(Player,on_delete=models.CASCADE)
team = models.ForeignKey(Team,on_delete=models.CASCADE)
join_date = models.DateField(auto_now_add=True)
不使用 Q 的一种解决方案是排除具有共同球员的球队。
selected_team = Team.objects.get(...) # get selected team
not_allowed_players = selected.team.players.all()
teams = Team.objects.all().exclude(players__in=not_allowed_players)