Maison >base de données >tutoriel mysql >Comment trouver des départements sans bénévoles à l'aide de ORM LEFT JOIN de Django ?

Comment trouver des départements sans bénévoles à l'aide de ORM LEFT JOIN de Django ?

DDD
DDDoriginal
2024-12-31 03:42:17157parcourir

How to Find Departments with No Volunteers Using Django's ORM LEFT JOIN?

LEFT JOIN Django ORM

Requête de départements sans bénévoles utilisant ORM

Dans le Django Object-Relational Mapping (ORM), vous pouvez utiliser l'opération LEFT JOIN pour récupérer des données de plusieurs tables, même s'il n'y a aucune ligne correspondante dans l'une des tables.

Pour rechercher des services auxquels aucun bénévole n'est affecté, vous pouvez utiliser l'approche suivante :

from django.db.models import OuterRef, Subquery

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

Explication :

  • La classe OuterRef représente la clé primaire de l'instance de modèle actuelle. Dans ce cas, OuterRef('pk') fait référence à la clé primaire du modèle Department.
  • La classe Subquery est utilisée pour créer une sous-requête qui représente la table DepartmentVolunteer. Le filtre isnull vérifie si la table départementvolontaire a une ligne correspondante pour chaque département.
  • La méthode de filtrage est utilisée pour filtrer les départements qui ont des lignes correspondantes dans la table départementvolontaire. La méthode values_list est ensuite utilisée pour récupérer uniquement le champ de nom des départements correspondants.

Cette approche vous permet d'étendre les relations à valeurs multiples entre les modèles et de récupérer des données même lorsqu'il n'y a aucune correspondance dans l'un des les tables.

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