ホームページ > データベース > mysql チュートリアル > Django の ORM を使用してボランティアなしで部門を効率的に見つけるにはどうすればよいですか?

Django の ORM を使用してボランティアなしで部門を効率的に見つけるにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-30 16:11:12
オリジナル
477 人が閲覧しました

How to Efficiently Find Departments Without Volunteers Using Django's ORM?

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 の方法:

  1. filter() メソッドを使用して、
  2. values_list() メソッドを使用して、必要な列の値を取得します。

次のコードは、このアプローチを示しています。

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート