在 Django 中,您可以優雅地執行 LEFT JOIN 操作來擷取特定資料。讓我們探索如何使用這種技術來識別沒有分配志工的部門。
給定以下模型:
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)
我們可以利用 Django ORM LEFT JOIN取得沒有關聯的部門志工:
qs = Department.objects.filter(departmentvolunteer__isnull=True).values_list('name', flat=True)
產生的查詢是:
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
此查詢擷取DepartmentVolunteer 表中沒有任何條目的部門名稱.
Django ORM透過過濾提供了對「跨越多值關係」的支持,從而可以有效地遍歷複雜的關係。
有關此主題的文檔可以在這裡找到:https://docs.djangoproject.com/en /stable/topics/db/queries/#spanning-multi-valued-relationships
以上是如何使用 LEFT JOIN 在 Django 中尋找未指派的部門?的詳細內容。更多資訊請關注PHP中文網其他相關文章!