Выполнение select_related() дважды - использование выходного набора queryset

Я пытаюсь соединить две модели вместе.

Проект имеет FK к org (orgid) У людей есть FK на org (orgid)

Но, я хочу результат орг + проект + люди,

Поэтому я попытался сделать select_related() и затем select_related на результате, чтобы присоединить новый набор запросов к другой модели.

Не получилось :(

)
a = people.objects.filter(personid=user, status='approved').select_related('orgid')
b = a.select_related('projectid')

Мне нужно соединение этих двух по существу

a = people.objects.filter(personid=user, status='approved').select_related('orgid')
b = project.objects.filter(orgid__in=t, orgid=orgid).select_related('orgid')

В SQL это будет просто

SELECT * from(
SELECT app_org.orgid as orgid, orgname, username, role from app_org
LEFT JOIN app_people on app_people.orgid = app_org.orgid)x
LEFT JOIN app_project in x.orgid = app_project.orgid

Может ли кто-нибудь помочь мне?

Я также пробовал

a = people.objects.filter(personid=user, status='approved').select_related('orgid__projectid')

Я не знаю вашу модель, но я думаю, что это должно работать:

query = people.objects.filter(personid=user, status='approved').select_related('org','org__project')

Отношение, которое вы отслеживаете, от org_id к Project, является обратным внешним ключом, поэтому вам нужно использовать prefetch_related с суффиксом _set, если у вас нет связанного имени в отношении.

a = (people.objects
    .filter(personid=user, status='approved')
    .select_related('orgid')
    .prefetch_related('orgid__project_set')
    )
Вернуться на верх