Django ORM の LEFT JOIN
左結合操作は、行と一致する列を結合することによって複数のテーブルからデータを取得するためによく使用されます。 Django では、filter() メソッドと value_list() メソッドを使用してこれを実現できます。
次のシナリオを考えてみましょう。Volunteer、Department、DepartmentVolunteer の 3 つのモデルがあります。ボランティアは複数の部門に所属することができ、1 つの部門に複数のボランティアが所属することもできます。ボランティアが割り当てられていないすべての部門を取得したいとします。
これを実現する 1 つの方法は、生の SQL クエリを使用することです。
SELECT d.name FROM vsp_department AS d LEFT JOIN vsp_departmentvolunteer AS dv ON d.id = dv.department_id WHERE dv.department_id IS NULL;
ただし、Django は、よりエレガントで、次の手順を使用してこの操作を実行する Python の方法:
次のコードは、このアプローチを示しています。
qs = Department.objects.filter( departmentvolunteer__isnull=True).values_list('name', flat=True) print(qs.query)
このクエリは、次の SQL:
SELECT "app_department"."name" FROM "app_department" LEFT OUTER JOIN "app_departmentvolunteer" ON ( "app_department"."id" = "app_departmentvolunteer"."department_id" ) WHERE "app_departmentvolunteer"."id" IS NULL
これはボランティアがいない部門の名前を返します。割り当てられました。
以上がDjango の ORM を使用してボランティアなしで部門を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。