2012-07-05 96 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) 

未測試的代碼段

相關問題