Django question, concerning custom ManyToMany relationships: I have a
User model which connects to a
Role model via a ManyToMany, and then the
Role model connects to two models,
ForumPermission. Problem is, I can’t figure out how to setup that connection.
Here are my models, with (I believe) irrelevant fields removed.
Role: 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 ForumPermissions(): permission = models.CharField(max_length=64) forum = models.ForeignKey( "forums.forum", db_column="forumId", on_delete=models.PROTECT )
Problem of course, is that I can’t connect multiple tables to the ManyToMany. 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 second set of joins for forum_permissions (I know that SQL isn’t exactly right, more for example).
So is there a way to accomplish this? Conditionally link to multiple tables? Or do I need to have a separate property in
Role for each
ForumPermission, and then have logic for each to utilize it?