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.