PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como escrevo uma consulta Django com uma subconsulta como parte da cláusula WHERE?


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.