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
Libérer: 2024-12-29 09:30:11
original
569 Les gens l'ont consulté

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)
Copier après la connexion

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)
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal