Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django-Manytomy关系的自定义联接查询_Python_Django - Fatal编程技术网

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的方法来实现这一点。