user3628119
user3628119

Reputation: 357

Django join query with related key

I have this model:

class Role(models.Model):
    role_name = models.CharField()

class RolePriviledge(models.Model):
    role = models.ForeignKey(Role, related_name='role_priviledge' )        
    module_name = models.CharField()
    priviledge_level = models.CharField()

class UserRole(models.Model):
    user = models.ForeignKey(User)
    role = models.ForeignKey(Role)

What I am trying to do is to find all the priviledges for a specified user. In sql, this would be:

SELECT t3.* 
FROM UserRole t1
JOIN Role t2 on t1.role_id = t2.id
JOIN RolePriviledge t3 on t2.id = t3.role_id
WHERE t1.user_id = USER_ID

(I can also skip the join with Role and just do an inner join between UserRole and RolePriviledge)

How would I do this join with Django ORM? UserRole.objects.filter(user_id=USER_ID).select_related('role') would join UserRole with Role. How do I join it with RolePriviledge?

Upvotes: 2

Views: 103

Answers (1)

MD. Khairul Basar
MD. Khairul Basar

Reputation: 5110

Use backward relation.

privileges = []
user_roles = UserRole.objects.filter(user__id=USER_ID)

for user_role in user_roles:
    privileges.append(user_role.role.role_priviledge.all())

privileges is a list of Querysets.

Upvotes: 2

Related Questions