Heim >Datenbank >MySQL-Tutorial >Wie finde ich mit Djangos ORM LEFT JOIN Abteilungen ohne Freiwillige?

Wie finde ich mit Djangos ORM LEFT JOIN Abteilungen ohne Freiwillige?

DDD
DDDOriginal
2024-12-31 03:42:17139Durchsuche

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

LINKS JOIN Django ORM

Abfragen nach Abteilungen ohne Freiwillige, die ORM verwenden

In der Im Django Object-Relational Mapping (ORM)-Framework können Sie die LEFT JOIN-Operation verwenden, um Daten abzurufen mehrere Tabellen, auch wenn es in einer der Tabellen keine passenden Zeilen gibt.

Um nach Abteilungen zu suchen, denen keine Freiwilligen zugewiesen sind, können Sie den folgenden Ansatz verwenden:

from django.db.models import OuterRef, Subquery

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

Erklärung:

  • Die OuterRef-Klasse stellt den Primärschlüssel der aktuellen Modellinstanz dar. In diesem Fall bezieht sich OuterRef('pk') auf den Primärschlüssel des Department-Modells.
  • Die Subquery-Klasse wird verwendet, um eine Unterabfrage zu erstellen, die die Tabelle „departmentvolunteer“ darstellt. Der isnull-Filter prüft, ob die Tabelle „departmentvolunteer“ für jede Abteilung eine passende Zeile enthält.
  • Die Filtermethode wird verwendet, um Abteilungen herauszufiltern, die übereinstimmende Zeilen in der Tabelle „departmentvolunteer“ haben. Die Methode „values_list“ wird dann verwendet, um nur das Namensfeld der übereinstimmenden Abteilungen abzurufen.

Mit diesem Ansatz können Sie mehrwertige Beziehungen zwischen Modellen aufspannen und Daten abrufen, selbst wenn es in einem davon keine Übereinstimmungen gibt die Tische.

Das obige ist der detaillierte Inhalt vonWie finde ich mit Djangos ORM LEFT JOIN Abteilungen ohne Freiwillige?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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