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