Python 具有相关键的Django连接查询
我有这个模型:Python 具有相关键的Django连接查询,python,django,django-models,Python,Django,Django Models,我有这个模型: 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.C
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
和roleprivilege
之间进行内部连接)
我如何加入Django ORMUserRole.objects.filter(user\u id=user\u id)。选择与之相关的('role')
将加入UserRole
和role
。如何将其与角色优先级
连接 使用
privileges
是查询集的列表。特定用户可能有多个用户角色,因此UserRole.objects.get(User\u id=User\u id)
正在抛出错误OK。我正在更新我的答案。已更新我的答案。此操作有效,但需要多个查询。是否没有办法作为一个连接查询(除了执行原始查询)来执行此操作?至少我找不到任何其他方法。您可以使用原始sql。
privileges = []
user_roles = UserRole.objects.filter(user__id=USER_ID)
for user_role in user_roles:
privileges.append(user_role.role.role_priviledge.all())