2012-07-05 59 views
0

我正在使用django应用程序来管理我的曲棍球池,并且在定义查询时遇到问题。相关机型看起来就像这样:如何查询我的django模型的manyToMany字段?

class Player(models.Model): 
    name = models.CharField(max_length=100) 

class Team(models.Model): 
    pool = models.ForeignKey(Pool) 
    manager = models.ForeignKey(User) 
    active_players = models.ManyToMany(Player) 

在我的观点之一,我想通过每一个玩家,并找出如果玩家被别人拥有。如果不是,则将它们添加到传递给模板的列表中。

我有一切工作,除了检查他们是否是一个具有某个pool_id的球队在Active_player列表中的某个球员。我到目前为止:

players = Player.objects.all() 
for player in players: 
    teams = Team.objects.filter(???not sure what to put here???) 
    #and then something here to check if teams is empty 

任何帮助表示赞赏。谢谢!

回答

3

如果有玩家,那么你就可以访问该玩家被分配到简单地与球队:

player.team_set.all() 

如果你只是想要得到的球员不能在一个团队名单,那就更简单了:

Player.objects.filter(team__isnull=True) 
+0

我不认为这会奏效。我的球员模型没有球队领域。每个球队的球员都保留在团队模型中的manytomany field active_players中。 – Ben313 2012-07-05 21:01:06

+2

“团队”是隐含的。当您设置M2M时,django会自动在'_set'处为您创建相关管理员。这称为“相关名称”,可以使用'related_name'属性进行定制。而且,无论相关名称是什么(如果自动添加了“_set”,也可以用于过滤)。去尝试一下。 – 2012-07-05 21:10:54

+0

谢谢你清理那个。现在对我来说很有意义。很酷。 – Ben313 2012-07-05 21:14:54

0

给这样的一个尝试:

without_team = [] 
for player in Player.objects.all(): 
    if not Team.objcets.filter(active_players__in=[player]): 
     without_team.append(player) 

未测试的代码段

相关问题