Как добавить условие "AND" к OUTER JOIN в Django ORM?
У меня есть запрос, построенный в Django, который почти правильный. Вот мой вызов:
all_companies = Company.objects.filter(Q(employees=None) | Q(employees=user.id)).annotate(username=F('employees__auth__username')).all().order_by('id')
В результате получается следующее:
SELECT
"main_company"."id",
"main_company"."schema_name",
"main_company"."name",
"main_company"."subdomain",
"main_company"."migration_id",
"auth_user"."username" AS "username"
FROM "main_company"
LEFT OUTER JOIN "main_company_employees"
ON ("main_company"."id" = "main_company_employees"."company_id")
LEFT OUTER JOIN "main_user"
ON ("main_company_employees"."user_id" = "main_user"."id")
LEFT OUTER JOIN "auth_user"
ON ("main_user"."auth_id" = "auth_user"."id")
WHERE ("main_company_employees"."user_id" IS NULL
OR "main_company_employees"."user_id" = 1)
ORDER BY "main_company"."id" ASC;
Однако этот запрос работает не совсем так, как я задумал. Я хотел бы получить следующее:
SELECT
"main_company"."id",
"main_company"."schema_name",
"main_company"."name",
"main_company"."subdomain",
"main_company"."migration_id",
"auth_user"."username" AS "username"
FROM "main_company"
LEFT OUTER JOIN "main_company_employees"
ON ("main_company"."id" = "main_company_employees"."company_id")
AND ("main_company_employees"."user_id" = 1)
LEFT OUTER JOIN "main_user"
ON ("main_company_employees"."user_id" = "main_user"."id")
LEFT OUTER JOIN "auth_user"
ON ("main_user"."auth_id" = "auth_user"."id")
WHERE ("main_company_employees"."user_id" IS NULL
OR "main_company_employees"."user_id" = 1)
ORDER BY "main_company"."id" ASC;
Обратите внимание на разницу в первом LEFT OUTER JOIN. Как этого можно добиться (кроме очевидного необработанного запроса, которого я пытаюсь избежать)?