Python 使用Django-Manytomy关系的自定义联接查询
我有一个Python 使用Django-Manytomy关系的自定义联接查询,python,django,Python,Django,我有一个用户模型,它通过多个连接到角色模型,然后角色模型连接到两个模型,站点权限或权限。问题是,我不知道如何设置该连接 这是我的模型,删除了(我相信)不相关的字段 角色: 角色权限: class RolePermissions(): role = models.ForeignKey("permissions.Role", on_delete=models.PROTECT) permission = models.ForeignKey("permiss
用户
模型,它通过多个连接到角色
模型,然后角色
模型连接到两个模型,站点权限
或权限
。问题是,我不知道如何设置该连接
这是我的模型,删除了(我相信)不相关的字段
角色:
角色权限:
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
)
站点权限:
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
)
对于许可证:
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
)
当然,问题是我无法将多个表连接到多个表。如果我在SQL中这样做,我会有类似于roles r LEFT JOIN role\u permissions rp\u s ON r.type='s'和r.id=rp.role\u id internal JOIN site\u permissions sp ON rp\u permission\u id=sp.id
的东西,还有第二组论坛权限的连接(我知道SQL并不完全正确,更多的例子)
那么有没有办法做到这一点呢?有条件地链接到多个表?或者我是否需要在角色中为每个站点权限
和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")
嘿,所以我知道我可以使用原始语法,我更好奇的是是否有Django的方法来实现这一点。