LEFT JOIN dans Django ORM
L'opération de jointure à gauche est couramment utilisée pour récupérer des données de plusieurs tables en combinant des lignes avec des colonnes correspondantes. Dans Django, vous pouvez y parvenir en utilisant les méthodes filter() et values_list().
Considérez le scénario suivant : vous disposez de trois modèles : Volunteer, Department et DepartmentVolunteer. Un bénévole peut appartenir à plusieurs départements et un département peut avoir plusieurs bénévoles. Vous souhaitez récupérer tous les départements auxquels aucun bénévole n'est affecté.
Une façon d'y parvenir consiste à utiliser une requête SQL brute :
SELECT d.name FROM vsp_department AS d LEFT JOIN vsp_departmentvolunteer AS dv ON d.id = dv.department_id WHERE dv.department_id IS NULL;
Cependant, Django fournit une approche plus élégante et Manière pythonique d'effectuer cette opération en suivant les étapes suivantes :
Le code suivant illustre cette approche :
qs = Department.objects.filter( departmentvolunteer__isnull=True).values_list('name', flat=True) print(qs.query)
Cette requête génère le SQL suivant :
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
qui renvoie les noms des départements auxquels aucun bénévole n'est affecté.
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!