Dalam Django, anda boleh melaksanakan operasi LEFT JOIN secara elegan untuk mendapatkan data tertentu. Mari kita terokai cara menggunakan teknik ini untuk mengenal pasti jabatan tanpa sukarelawan yang ditugaskan.
Memandangkan model berikut:
class Volunteer(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) email = models.CharField(max_length=50) gender = models.CharField(max_length=1, choices=GENDER_CHOICES) class Department(models.Model): name = models.CharField(max_length=50, unique=True) overseer = models.ForeignKey(Volunteer, blank=True, null=True) location = models.CharField(max_length=100, null=True) class DepartmentVolunteer(models.Model): volunteer = models.ForeignKey(Volunteer) department = models.ForeignKey(Department) assistant = models.BooleanField(default=False) keyman = models.BooleanField(default=False) captain = models.BooleanField(default=False) location = models.CharField(max_length=100, blank=True, null=True)
Kita boleh memanfaatkan Django ORM's LEFT JOIN untuk mendapatkan jabatan yang tidak berkaitan sukarelawan:
qs = Department.objects.filter(departmentvolunteer__isnull=True).values_list('name', flat=True)
Pertanyaan yang dijana ialah:
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
Pertanyaan ini mendapatkan semula nama jabatan yang tidak terdapat sebarang entri dalam jadual Sukarelawan Jabatan .
Django ORM menyediakan sokongan untuk "Menjangkau Perhubungan Berbilang Nilai" melalui penapisan, yang membolehkan pelintasan perhubungan kompleks yang cekap.
Dokumentasi mengenai topik ini boleh didapati di sini: https://docs.djangoproject.com/en/stable/topics/db/queries/#spanning-multi-valued-relationships
Atas ialah kandungan terperinci Bagaimana Mencari Jabatan yang Tidak Ditugaskan di Django Menggunakan LEFT JOIN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!