Reputation: 357
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
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