2013-05-08 61 views
0

選擇用戶,我有兩個型號:的Django從單獨的模型

class PlayerPermissionGroup(models.Model): 
    player = models.ForeignKey(Player) 
    name = models.CharField(max_length=200) 

class PlayerPermissionGroupMember(models.Model): 
    permission_group = models.ForeignKey(PlayerPermissionGroup) 
    user = models.ForeignKey(User) 

目前,得到所有成員的權限組我做的:

getMembers(group): 
    group_member_ids = (PlayerPermissionGroupMember.objects.filter(permission_group=group) 
                 .values_list('user__id')) 
    return User.objects.filter(pk__in=group_member_ids) 

有沒有更好/更清潔的方式來去做?

回答

1

你可能FK添加related_name給你User

class PlayerPermissionGroupMember(models.Model): 
    permission_group = models.ForeignKey(PlayerPermissionGroup) 
    user = models.ForeignKey(User, related_name='player_permision_groups') 

然後,你可以這樣做:

getMembers(group): 
    return User.objects.filter(player_permision_groups__permission_group=group) 

您可能略有省略related_name但查找改變使用默認related_name那Django代替。

+0

太棒了,正是我在找的!我假設這只是你的內部查詢然後在SQL端? – 2013-05-11 22:55:05

+0

是的,你可能知道,Django中的查詢是懶惰的,所以你可以鏈接'distinct','values','values_list'等方法,並且單個sql查詢將在末尾被構建:) – Gerard 2013-05-17 16:48:28