Search code examples
pythondjangopostgresqlinner-join

How to perform inner join in django


Taking the sentence: select * from auth_permission left join auth_group_permissions on (auth_group_permissions.permission_id = auth_permission.id) How can i do in django with queryset i do not understand how the inner join works in querysets

in models of default django auth

I've done this:

permiso = Permission.objects.all().select_related()
...: for x in permiso:
...:     print(x.group_set.all().query)

and see in each loop:

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

Solution

  • You can retrieve all group elements and permission by prefetch_related

    permissions = Permission.objects.prefetch_related('group_set').all()
    for perm in permissions:
       group = perm.group_set.all()