2014-08-31 71 views
0

這些是我的模特。在一行中過濾反向manytomany django?

class League(models.Model): 
    league_name=models.CharField(max_length=20) 
    league_id=models.IntegerField() 

class LeagueAdministrator(models.Model): 
    administrator = models.ManyToManyField(User) 
    league = models.ManyToManyField('League') 

考慮到可能存在的聯盟多個管理員:我想它返回的查詢與誰是具體的聯賽administator的所有用戶對象上設置一個查詢。這就是我現在所做的。

league=League.objects.get(league_id=1) 
usersids=LeagueAdministrator.objects.filter(league=league).values_list('administrator') 
Administrators=User.objects.filter(id__in=usersids) 

謝謝。

+0

我不認爲你的模型結構是正確的:我懷疑*非常*多少你需要在兩側ManyToManys一個LeagueAdminstrator類。相反,LeagueAdministrator本身就是多對多關係中的鏈接表,與ForeignKey都是雙方。 – 2014-08-31 15:38:26

+0

我不明白:如果有很多聯賽和用戶可以在很多聯賽中踢球,該怎麼辦?如果你說我不需要多對多,但只需要外鍵:在這種情況下,我需要多對多的字段? (如果出現一個連接到我的模型的示例) – foebu 2014-08-31 15:43:38

+0

但我的觀點是,*是*多對多。任何多對多關係都有一個鏈接表和外鍵:Django ManyToManyField只是爲你創建這個表,並創建一個Pythonic訪問連接的方式。在你的情況下,你允許聯盟和用戶的每個組合都有多個聯盟管理員,這是沒有意義的:任何人只能成爲每個團隊的管理員,即使他們可以管理多個團隊,每個團隊都可以擁有多個管理員。 – 2014-08-31 15:54:44

回答

0

你可以嘗試這樣的事情:

administrators = User.objects.filter(leagueadministrator__league__id=1).distinct() 

Documentation here