Django ORM:递归多对多字段连接

时间:2014-08-18 15:20:27

标签: python django

我有这些模特:

class Permission(models.Model):
    per_id = models.ForeignKey("self",null=True)
    permissions = models.ManyToManyField("self", null=True)
    type = models.IntegerField(blank=True, null=True)

class User(models.Model):
    name = models.CharField(max_length=50, blank=True)
    permissions = models.ManyToManyField(Permission)

我们的类型= 1823的角色指向许多权限,类型= 1822和权限= null(多对多递归关系),两者都是"角色和权限"存储在权限表中。我想使用Django ORM获得用户权限。

User.objects.get(pk=3).permissions.filter(permissions__isnull=False).values("permission__id") "Gives only role's permissions

User.objects.get(pk=3).permissions.filter(permissions__isnull=True).values("id") "Gives only permissions

我想在单个查询中组合和区分这两个QuerySet。

感谢

1 个答案:

答案 0 :(得分:0)

这样的事情解决了我的问题:

Permission.objects.filter(Q(permission__user__id=3) | Q(user__id=3), type=1822).distinct()