Subconsultas precisam ser consultas que não são avaliadas imediatamente para que sua avaliação possa ser adiada até que a consulta externa seja executada.
get()
não se encaixa no projeto, pois é executado imediatamente e retorna uma instância de objeto em vez de um Queryset
. No entanto, substituindo
filter
para get
e, em seguida, pegar um [:1]
fatia deve funcionar:StatByHour.objects.filter(hour_of_day=OuterRef('hour_filter')).values('hour_of_day')[:1]
Observe como a referência de campo em OuterRef é uma string literal em vez de uma variável.
Além disso, as subconsultas precisam retornar uma única coluna e uma única linha (já que são atribuídas a um único campo), daí os
values()
e o corte acima. Além disso, não usei uma subconsulta em um
Q
objeto ainda; Não tenho certeza de que funcionará. Talvez seja necessário primeiro salvar a saída da subconsulta em uma anotação e depois usá-la para os cálculos do filtro.