[英]Use custom join query with Django ManyToMany relationship
我有一个User
model,它通过 ManyToMany 连接到Role
model,然后Role
model 连接到两个模型, SitePermission
或ForumPermission
。 问题是,我不知道如何设置该连接。
这是我的模型,(我相信)删除了不相关的字段。
角色:
class Role():
class RoleTypes(models.TextChoices):
SITE = "s", "Site"
FORUM = "f", "Forum"
role_type = models.CharField(max_length=1, choices=RoleTypes.choices, null=True)
permissions = models.ManyToManyField(
"permissions.Permission",
related_name="roles",
through="permissions.RolePermissions",
)
角色权限:
class RolePermissions():
role = models.ForeignKey("permissions.Role", on_delete=models.PROTECT)
permission = models.ForeignKey("permissions.SitePermission", on_delete=models.PROTECT)
网站权限:
class SitePermissions():
permission = models.CharField(max_length=64)
论坛权限:
class SitePermissions():
permission = models.CharField(max_length=64)
forum = models.ForeignKey(
"forums.forum", db_column="forumId", on_delete=models.PROTECT
)
当然,问题是我无法将多个表连接到多对多。 If I was doing it in SQL, I'd have something like roles r LEFT JOIN role_permissions rp_s ON r.type = 's' and r.id = rp.role_id INNER JOIN site_permissions sp ON rp_s.permission_id = sp.id
with a forum_permissions 的第二组连接(例如,我知道 SQL 并不完全正确)。
那么有没有办法做到这一点? 有条件地链接到多个表? 或者我是否需要在Role
为每个SitePermission
和ForumPermission
拥有一个单独的属性,然后每个人都有逻辑来使用它?
尝试
RolePermissions.objects.raw("roles r LEFT JOIN role_permissions rp_s ON r.type = 's' and r.id = rp.role_id INNER JOIN site_permissions sp ON rp_s.permission_id = sp.id")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.