判刑:
select * from auth_permission left join
auth_group_permissions on (auth_group_permissions.permission_id = auth_permission.id)
如何在django中使用queryset我不明白内部联接如何在查询集中工作
在默认django auth的模型中
我已经这样做了:
permiso = Permission.objects.all().select_related()
...: for x in permiso:
...: print(x.group_set.all().query)
并在每个循环中看到:
SELECT "auth_group"."id", "auth_group"."name" FROM "auth_group" INNER JOIN "auth_group_permissions" ON ("auth_group"."id" = "auth_group_permissions"."group_id") WHERE "auth_group_permissions"."permission_id" = 1255
答案 0 :(得分:2)
您可以按prefetch_related
检索所有组元素和权限permissions = Permission.objects.prefetch_related('group_set').all()
for perm in permissions:
group = perm.group_set.all()
答案 1 :(得分:-1)
在Django中进行开发时,通常不会考虑要执行的SQL查询。在您的情况下,如果您查看身份验证应用的model definitions,则会发现Group
模型的permissions
字段类型为ManyToMany。即使在Group
模型中定义了字段,您也可以按相反的顺序执行(检查this)。因此,为了列出所有权限,并为每个权限指明它们是什么组,您可以执行以下操作:
for perm in Permission.objects.all():
groups = perm.group_set.all()
# Do something with groups