PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie schreibe ich eine Django-Abfrage mit einer Unterabfrage als Teil der WHERE-Klausel?

Unterabfragen müssen Abfragen sein, die nicht sofort ausgewertet werden, damit ihre Auswertung verschoben werden kann, bis die äußere Abfrage ausgeführt wird. get() nicht geeignet, da es sofort ausgeführt wird und statt eines Queryset eine Objektinstanz zurückgibt .

Ersetzen Sie jedoch filter für get und dann ein [:1] nehmen Slice sollte funktionieren:

StatByHour.objects.filter(hour_of_day=OuterRef('hour_filter')).values('hour_of_day')[:1]

Beachten Sie, wie die Feldreferenz in OuterRef ist eher ein String-Literal als eine Variable.

Darüber hinaus müssen Unterabfragen eine einzelne Spalte und eine einzelne Zeile zurückgeben (da sie einem einzelnen Feld zugewiesen sind), daher die values() und das Slicing oben.

Außerdem habe ich keine Unterabfrage in einem Q verwendet Objekt noch; Ich bin mir nicht sicher, ob es funktionieren wird. Möglicherweise müssen Sie die Ausgabe der Unterabfrage zuerst in einer Anmerkung speichern und diese dann für Ihre Filterberechnungen verwenden.