Исходя из вашего комментария, вы хотите, чтобы все UserWorkerProfile
s имели a (может быть ноль, один или несколько) связанных Employment
экземпляров и Employment
экземпляра.с Company
(у каждого Employment
есть точно один company
) данной компании.
Мы можем запросить такие UserWorkingProfile
s с помощью следующего запроса:
UserWorkingProfile.objects.filter(<b>employment__company=some_comany</b>)
Таким образом, этот набор запросов вернет все UserWorkingProfile
с, для которых существует экземпляр Employment
, который ссылается на данную компанию some_company
и UserWorkingProfile
.
В Django используются два последовательных подчеркивания для просмотра «сквозных» отношений (это можно использовать в двунаправленно , обратите внимание, что два последовательных подчеркивания используются для других вещей, помимо просмотра отношений).
Таким образом, мы написали запрос, более или менее похожий на:
SELECT `userworkingprofile`.*
FROM `userworkingprofile`
JOIN `employment` ON `employment`.`employee_id` = `userworkingprofile`.`id`
WHERE `employment`.`company_id` = 123
С 123
на самом деле pk
из some_company
.
Обратите внимание, что этоВозможно, что то же самое UserWorkingProfile
встречается несколько раз в этом наборе запросов, если сотрудник работал sevВремя для some_company
.
Если вы хотите, чтобы каждое UserWorkingProfile
происходило не более один раз , вам следует добавить к нему .distinct()
:
UserWorkingProfile.objects.filter(employment__company=some_comany)<b>.distinct()</b>
Хотя Django действительно определяет диспетчер объектов с именем employment_set
в экземпляре Company
, насколько я знаю, вы не можете "объединить" два таких менеджера (поэтому <s>some_company.employment_set.employee</s>
не будет не работать).