Выполнение 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')
)