django Создание SQL запроса через ORM с не явными связми, возможно ли?
Пока писал вопрос в Q&A разобрался в ORM.

Конкретно в моем случае запрос можно переписать c JOIN на WHERE:

SELECT * FROM pybb_forum as ff,guardian_groupobjectpermission as gg, auth_permission as pp 
     WHERE codename = 'view_forum'      
     AND gg.group_id in (1,2,3)     
     AND gg.content_type_id = 9 
     AND  ff.id = gg.object_pk 
     AND gg.permission_id = pp.id;


a WHERE уже довольно просто подставить в objects.extra:

Forum.objects.extra(
    tables = ['guardian_groupobjectpermission', 'auth_permission'],
    where = [""" codename = "view_forum"
    AND guardian_groupobjectpermission.group_id in (1,2,3)
    AND guardian_groupobjectpermission.content_type_id = 9
    AND pybb_forum.id = guardian_groupobjectpermission.object_pk
    AND guardian_groupobjectpermission.permission_id = auth_permission.id
    """]
)


Единственная проблема — совсем пропала читабельность такого запроса.
Вам же выше ответили, что в доке это всё есть. Или вам нужно чтоб за вас сделали?
Ну вот на первый раз я за вас сделал, но вам должно быть стыдно.
Добавьте к модели Forum:

groupobjectpermission = GenericRelation(GroupObjectPermissionBase, 
                                 content_type_field='content_type',
                                 object_id_field='object_pk')

И тогда будет работать как вы и хотели - Forum.objects.filter(groupobjectpermission__permission__codename='view_forum')