Maison >base de données >tutoriel mysql >Comment rechercher des départements non attribués dans Django en utilisant LEFT JOIN ?

Comment rechercher des départements non attribués dans Django en utilisant LEFT JOIN ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-29 09:30:11583parcourir

How to Find Unassigned Departments in Django Using LEFT JOIN?

Découverte des départements non attribués avec Django ORM : LEFT JOIN

Dans Django, vous pouvez exécuter avec élégance des opérations LEFT JOIN pour récupérer des données spécifiques. Explorons comment utiliser cette technique pour identifier les départements sans bénévoles assignés.

LEFT JOIN avec Django ORM

Étant donné les modèles suivants :

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)

Nous pouvons tirer parti de Django ORM REJOIGNEZ À GAUCHE pour obtenir des départements sans bénévoles associés :

qs = Department.objects.filter(departmentvolunteer__isnull=True).values_list('name', flat=True)

Explorer le Requête

La requête générée est :

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

Cette requête récupère les noms de département là où il n'y a aucune entrée dans la table DepartmentVolunteer.

Couvrant des relations à plusieurs valeurs

Django ORM prend en charge les « relations multi-valeurs » via le filtrage, ce qui permet une traversée efficace de relations complexes.

La documentation sur ce sujet peut être trouvée ici : https://docs.djangoproject.com/en/stable/topics/db/queries/#spanning-multi-valued-relationships

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn