sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo escribo una consulta de Django con una subconsulta como parte de la cláusula WHERE?

Subconsultas deben ser consultas que no se evalúen inmediatamente para que su evaluación se pueda posponer hasta que se ejecute la consulta externa. get() no se ajusta a la factura ya que se ejecuta inmediatamente y devuelve una instancia de objeto en lugar de un Queryset .

Sin embargo, sustituyendo filter para get y luego tomando un [:1] rebanada debería funcionar:

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

Observe cómo la referencia de campo en OuterRef es un literal de cadena en lugar de una variable.

Además, las subconsultas deben devolver una sola columna y una sola fila (ya que están asignadas a un solo campo), por lo tanto, los values() y el corte de arriba.

Además, no he usado una subconsulta en una Q objeto todavía; No estoy seguro de que funcione. Es posible que primero deba guardar la salida de la subconsulta en una anotación y luego usarla para sus cálculos de filtro.