【发布时间】:2021-12-03 20:11:15
【问题描述】:
我在 django 项目中有一个自定义权限系统,可以将任何用户链接到任何特定模型实例以授予对该对象的权限。它比这更复杂,但归结为:
class Permission(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
我想查询任何用户的所有权限,这些权限链接到特定用户已被授予权限的相同 content_object(s)。换句话说,有问题的用户想看看还有谁对他们所做的任何相同对象拥有权限。
在 SQL 中,以下方法可以解决问题:
SELECT
perm1.*
FROM app_permission perm1
LEFT JOIN app_permission perm2
ON perm2.user_id = 12345
AND perm1.content_type_id = perm2.content_type_id
AND perm1.object_id = perm2.object_id
WHERE perm2.id IS NOT NULL;
在 django ORM 中是否可以实现这一点?
【问题讨论】:
标签: sql django django-models django-orm