Как добавить условие "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. Как этого можно добиться (кроме очевидного необработанного запроса, которого я пытаюсь избежать)?

Вернуться на верх