Как избежать необработанного SQL-запроса с несколькими JOIN?

Есть ли способ, как сделать сложные SQL селекты в методах Django? С несколькими JOIN пересекаются несколько таблиц с различными отношениями. Я пробовал много попыток с методом select_related, но так и не разобрался. Проще говоря - мне нужен ListView для модели Objekt отфильтрованный по модели User.

База данных выглядит следующим образом - https://dbdiagram.io/d/61d699903205b45b73d92750/

Я думаю, что подобные запросы должны выполняться гораздо более простым способом.

Набор запросов для ListView

def get_queryset(self):
    return Objekt.objects.raw('''SELECT
                portal_objekt.id AS id,
                portal_objekt.cislo_objektu AS cislo_objektu,
                portal_objekt.mesto AS objekt_mesto,
                portal_objekt.ulice AS objekt_ulice,
                portal_objekt.c_popisne AS objekt_c_popisne,
                portal_objekt.c_orientacni AS objekt_c_orientacni,
                portal_objekt.psc AS objekt_psc,
                CASE
                WHEN portal_mereni.komodita = 'e' THEN 'elektřina'
                WHEN portal_mereni.komodita = 'p' THEN 'plyn'
                WHEN portal_mereni.komodita = 'v' THEN 'voda'
                WHEN portal_mereni.komodita = 't' THEN 'teplo'
                ELSE 'ostatní'
                END AS mereni_komodita
            FROM portal_objekt
            INNER JOIN portal_sluzbakesmlouve
                ON portal_sluzbakesmlouve.objekt_id = portal_objekt.id
            INNER JOIN portal_smlouva
                ON portal_sluzbakesmlouve.smlouva_id = portal_smlouva.id
            INNER JOIN portal_uzivatelkesmlouve
                ON portal_uzivatelkesmlouve.smlouva_id = portal_smlouva.id
            INNER JOIN portal_user
                ON portal_uzivatelkesmlouve.uzivatel_id = portal_user.id
            INNER JOIN portal_mereni
                ON portal_mereni.objekt_id = portal_objekt.id
            WHERE portal_user.email = %s AND
                portal_sluzbakesmlouve.platnost_od < CURRENT_DATE AND (
                portal_sluzbakesmlouve.platnost_do > CURRENT_DATE OR
                portal_sluzbakesmlouve.platnost_do IS NULL )                    
            ORDER BY portal_objekt.cislo_objektu''', [
                self.request.user.email
                ]
            )
Вернуться на верх