我有这个模型:
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)
我想做的是找到指定用户的所有权限。在 sql 中,这将是:
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
(我也可以跳过与 Role 的连接,只在 UserRole 和 RolePriviledge 之间进行内部连接)
我将如何加入 Django ORM? UserRole.objects.filter(user_id=USER_ID).select_related('role') 将加入 UserRole 和 Role。如何使用 RolePriviledge 加入它?
请您参考如下方法:
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 是查询集的列表。
