LEFT JOIN dalam Django ORM
Operasi gabungan kiri biasanya digunakan untuk mendapatkan semula data daripada berbilang jadual dengan menggabungkan baris dengan lajur yang sepadan. Dalam Django, anda boleh mencapai ini menggunakan kaedah penapis() dan values_list().
Pertimbangkan senario berikut: anda mempunyai tiga model - Sukarelawan, Jabatan dan Sukarelawan Jabatan. Seorang sukarelawan boleh tergolong dalam beberapa jabatan, dan satu jabatan boleh mempunyai beberapa sukarelawan. Anda ingin mendapatkan semula semua jabatan yang tidak mempunyai sebarang sukarelawan yang ditugaskan.
Salah satu cara untuk mencapai ini adalah melalui pertanyaan SQL mentah:
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;
Walau bagaimanapun, Django menyediakan yang lebih elegan dan Cara Pythonic untuk melaksanakan operasi ini menggunakan langkah berikut:
Kod berikut menunjukkan pendekatan ini:
qs = Department.objects.filter( departmentvolunteer__isnull=True).values_list('name', flat=True) print(qs.query)
Pertanyaan ini menjana mengikuti 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
yang mengembalikan nama jabatan yang tidak mempunyai sebarang sukarelawan ditugaskan.
Atas ialah kandungan terperinci Bagaimana Mencari Jabatan Dengan Cekap Tanpa Sukarelawan Menggunakan ORM Django?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!