簡體   English   中英

使用 Django 多對多關系的自定義連接查詢

[英]Use custom join query with Django ManyToMany relationship

我有一個User model,它通過 ManyToMany 連接到Role model,然后Role model 連接到兩個模型, SitePermissionForumPermission 問題是,我不知道如何設置該連接。

這是我的模型,(我相信)刪除了不相關的字段。

角色:

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為每個SitePermissionForumPermission擁有一個單獨的屬性,然后每個人都有邏輯來使用它?

嘗試

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM