Maison > base de données > tutoriel mysql > Comment puis-je rechercher efficacement des départements sans volontaires affectés dans Django sans SQL brut ?

Comment puis-je rechercher efficacement des départements sans volontaires affectés dans Django sans SQL brut ?

Barbara Streisand
Libérer: 2025-01-02 19:16:44
original
888 Les gens l'ont consulté

How Can I Efficiently Query for Departments with No Assigned Volunteers in Django Without Raw SQL?

LEFT JOIN Django ORM : une alternative aux requêtes SQL brutes

Question :

Considérez les modèles suivants :

class Volunteer(models.Model):
    ...

class Department(models.Model):
    ...

class DepartmentVolunteer(models.Model):
    ...
Copier après la connexion

Pour interroger tous les départements sans attribué volontaires, on peut utiliser l'instruction SQL suivante :

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

Existe-t-il une manière plus proche de celle de Django d'effectuer cette requête, ou faut-il s'en tenir au SQL brut ?

Réponse :

Django fournit une manière plus concise et expressive d'effectuer la même requête en utilisant le filtre() method :

qs = Department.objects.filter(
    departmentvolunteer__isnull=True).values_list('name', flat=True)
Copier après la connexion

Cette requête couvre la relation à valeurs multiples entre Department et DepartmentVolunteer, comme décrit dans la documentation Django : https://docs.djangoproject.com/en/stable/topics/db/queries /#spanning-multi-valued-relationships

La requête résultante générée par Django 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 approche élimine le besoin de SQL brut et fournit une requête plus lisible et maintenable.

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