Heim > Datenbank > MySQL-Tutorial > Wie kann ich in Django ohne Raw SQL effizient nach Abteilungen ohne zugewiesene Freiwillige suchen?

Wie kann ich in Django ohne Raw SQL effizient nach Abteilungen ohne zugewiesene Freiwillige suchen?

Barbara Streisand
Freigeben: 2025-01-02 19:16:44
Original
886 Leute haben es durchsucht

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

LEFT JOIN Django ORM: Eine Alternative zu Raw SQL-Abfragen

Frage:

Überlegen die folgenden Modelle:

class Volunteer(models.Model):
    ...

class Department(models.Model):
    ...

class DepartmentVolunteer(models.Model):
    ...
Nach dem Login kopieren

Zur Abfrage aller Abteilungen ohne Zuweisung Freiwillige können die folgende SQL-Anweisung verwenden:

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;
Nach dem Login kopieren

Gibt es eine Django-ähnlichere Möglichkeit, diese Abfrage durchzuführen, oder sollte man bei reinem SQL bleiben?

Antwort :

Django bietet eine prägnantere und ausdrucksstärkere Möglichkeit, dieselbe Abfrage mithilfe von filter() durchzuführen. Methode:

qs = Department.objects.filter(
    departmentvolunteer__isnull=True).values_list('name', flat=True)
Nach dem Login kopieren

Diese Abfrage umfasst die mehrwertige Beziehung zwischen Department und DepartmentVolunteer, wie in der Django-Dokumentation beschrieben: https://docs.djangoproject.com/en/stable/topics/db/queries /#spanning-multi-valued-relationships

Die resultierende Abfrage, die von Django generiert wurde ist:

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
Nach dem Login kopieren

Dieser Ansatz macht Roh-SQL überflüssig und bietet eine besser lesbare und wartbare Abfrage.

Das obige ist der detaillierte Inhalt vonWie kann ich in Django ohne Raw SQL effizient nach Abteilungen ohne zugewiesene Freiwillige suchen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage