Skip to main content
 首页 » 编程设计

python之Django 使用相关键加入查询

2024年09月07日39mate10pro

我有这个模型:

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 加入它?

请您参考如下方法:

使用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 是查询集的列表。