PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come faccio a scrivere una query Django con una sottoquery come parte della clausola WHERE?

Subquery devono essere query che non vengono valutate immediatamente in modo che la loro valutazione possa essere posticipata fino all'esecuzione della query esterna. get() non si adatta al conto in quanto viene eseguito immediatamente e restituisce un'istanza dell'oggetto anziché un Queryset .

Tuttavia, sostituendo filter per get e quindi prendendo un [:1] slice dovrebbe funzionare:

StatByHour.objects.filter(hour_of_day=OuterRef('hour_filter')).values('hour_of_day')[:1]

Nota come il riferimento al campo in OuterRef è una stringa letterale anziché una variabile.

Inoltre, le sottoquery devono restituire una singola colonna e una singola riga (poiché sono assegnate a un singolo campo), quindi values() e l'affettatura sopra.

Inoltre, non ho usato una sottoquery in un Q oggetto ancora; Non sono sicuro che funzionerà. Potrebbe essere necessario salvare prima l'output della sottoquery in un'annotazione e quindi utilizzarlo per i calcoli del filtro.