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.