Rumah >pangkalan data >tutorial mysql >Bagaimana Mencari Jabatan Dengan Cekap Tanpa Sukarelawan Menggunakan ORM Django?

Bagaimana Mencari Jabatan Dengan Cekap Tanpa Sukarelawan Menggunakan ORM Django?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-30 16:11:12497semak imbas

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

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:

  1. Gunakan kaedah penapis() untuk menentukan syarat.
  2. Gunakan kaedah values_list() untuk mendapatkan semula nilai lajur yang dikehendaki.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn