ホームページ > データベース > mysql チュートリアル > 生の SQL を使用せずに、Django でボランティアが割り当てられていない部門を効率的にクエリするにはどうすればよいですか?

生の SQL を使用せずに、Django でボランティアが割り当てられていない部門を効率的にクエリするにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-02 19:16:44
オリジナル
887 人が閲覧しました

How Can I Efficiently Query for Departments with No Assigned Volunteers in Django Without Raw SQL?

LEFT JOIN Django ORM: 生の SQL クエリの代替

質問:

検討してください次のモデル:

class Volunteer(models.Model):
    ...

class Department(models.Model):
    ...

class DepartmentVolunteer(models.Model):
    ...
ログイン後にコピー

ボランティアが割り当てられていないすべての部門をクエリするには、次の 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 に似た方法はありますか? 、それとも生にこだわるべきかSQL?

答え:

Django は、filter() メソッドを使用して同じクエリを実行するためのより簡潔で表現力豊かな方法を提供します:

qs = Department.objects.filter(
    departmentvolunteer__isnull=True).values_list('name', flat=True)
ログイン後にコピー

このクエリは、Django ドキュメントで説明されているように、Department とDepartmentVolunteer の間の複数値の関係に及びます。 https://docs.djangoproject.com/en/stable/topics/db/queries/#spanning-multi-valued-relationships

Django によって生成された結果のクエリは次のとおりです:

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
ログイン後にコピー

このアプローチにより、生の SQL が不要になり、より読みやすく保守しやすいクエリが提供されます。

以上が生の SQL を使用せずに、Django でボランティアが割り当てられていない部門を効率的にクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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