Отношения в Django - как фильтровать данные

Я просмотрел много записей и знаю, как фильтровать простые отношения.
К сожалению, я застрял и не знаю, как фильтровать данные моей таблицы, когда одна из таблиц является ветвью определенной строки.

models.py

from django.contrib.auth.models import User

class Autor(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True)
   description = models.TextField(blank=True, null=True)

class Incident(models.Model):
   group_no = models.ForeignKey(Group, on_delete=models.CASCADE, default=1)
   description = models.TextField(blank=True, null=True)
   deleted = models.BooleanField(default=False)

class Department-leader(models.Model):
   user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="leader")
   department = models.ForeignKey(Group, on_delete=models.CASCADE)

class Group(models.Model):
   group_no = models.CharField(max_length=40, unique=True)
   active = models.BooleanField(default=True)

views.py

def get_author(user):
    qs = Autor.objects.filter(user=user)
    if qs.exists():
        return qs[0]
    return None

def show_all(request):
    show_all_records = Incident.objects.filter(deleted=False).order_by('-id')[:300]

    if request.user.is_authenticated:
        autors_list = get_author(request.user)
        user_list = get_user_model()
        logged_user = get_object_or_404(user_list, username__exact=autors_list)
        
        (...)
        
        print("Logged user: " + str(logged_user.id))
    else:
        logged_user = ""


    context = {
        'show_all_records': show_all_records,
        'logged_user': logged_user,
    }

    return render(request, 'incident/all_records.html', context)

Переменная show_all_records представляет все записи таблицы Incident и это нормально.

Второе, что я хотел бы отобразить, это записи для вошедшего в систему человека, т.е. все происшествия в конкретных отделах руководителя, который вошел в систему.

enter image description here

Если бы таблицы были соединены линейно, я бы без проблем построил этот фильтр.
Но как сделать фильтр для такого расположения таблиц?

На чистом SQL это выглядело бы примерно так:

select 
    bledy_bledy.nr_zlecenia,
    bledy_bledy.ilosc_bledow,
    bledy_gruparobocza.nr_grupy,
    auth_user.username,
    auth_user.id
from 
    bledy_bledy 
LEFT JOIN 
    bledy_lider_dzial
on
    bledy_bledy.nr_grupy_roboczej_id = bledy_lider_dzial.dzial_id
LEFT JOIN 
    bledy_gruparobocza
on
    bledy_lider_dzial.dzial_id = bledy_gruparobocza.id
LEFT JOIN 
    auth_user
on
    bledy_lider_dzial.user_id = auth_user.id
where
    auth_user.id = 4

**Могу ли я рассчитывать на подсказку, как его построить?

Думаю, это то, что вам нужно.

user = request.user

# only need the primary keys of the group leaders for the next query
department_ids = user.leader.all().values_list('department_id', flat=True)

incidents = Incident.objects.filter( group_no_id__in= departments )
<
Вернуться на верх