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.