Kurtis Nusbaum
Kurtis Nusbaum

Reputation: 30845

Django select users from seperate model

I have two models:

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)

Currently, to get all the member in a Permissions Group I do:

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

Is there a better/cleaner way to do that?

Upvotes: 0

Views: 65

Answers (1)

Gerard
Gerard

Reputation: 9428

You MAY add a related_name to you FK to User:

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

Then you can do:

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

You may omit the related_name but the lookup changes slightly by using the default related_name that django assigns instead.

Upvotes: 1

Related Questions