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
以上がDjango で LEFT JOIN を使用して未割り当ての部門を検索する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。