Podzapytania
muszą być zapytaniami, które nie są natychmiast oceniane, aby ich ocena mogła zostać odroczona do czasu uruchomienia zapytania zewnętrznego. get() nie pasuje do rachunku, ponieważ jest wykonywany natychmiast i zwraca instancję obiektu zamiast Queryset .
Jednak zastąpienie filter dla get a następnie wzięcie [:1] plasterek powinien działać:
StatByHour.objects.filter(hour_of_day=OuterRef('hour_filter')).values('hour_of_day')[:1]
Zwróć uwagę, jak odwołanie do pola w OuterRef jest literałem tekstowym, a nie zmienną.
Co więcej, podzapytania muszą zwracać pojedynczą kolumnę i pojedynczy wiersz (ponieważ są przypisane do jednego pola), stąd values() i powyższego krojenia.
Ponadto nie użyłem podzapytania w Q obiekt jeszcze; Nie jestem pewien, czy to zadziała. Być może będziesz musiał najpierw zapisać wynik podzapytania w adnotacji, a następnie użyć go do obliczeń filtra.