Subqueries
måste vara frågor som inte omedelbart utvärderas så att deras utvärdering kan skjutas upp tills den yttre frågan körs. get()
passar inte räkningen eftersom den exekveras omedelbart och returnerar en objektinstans snarare än en Queryset
.
Men ersätter filter
för get
och sedan ta en [:1]
skiva borde fungera:
StatByHour.objects.filter(hour_of_day=OuterRef('hour_filter')).values('hour_of_day')[:1]
Notera hur fältreferensen i OuterRef är en bokstavlig sträng snarare än en variabel.
Dessutom måste underfrågor returnera en enda kolumn och en enda rad (eftersom de är tilldelade ett enda fält), därav values()
och skivningen ovan.
Dessutom har jag inte använt en underfråga i en Q
objekt ännu; Jag är inte säker på att det kommer att fungera. Du kanske måste spara underfrågans utdata i en anteckning först och sedan använda den för dina filterberäkningar.