Sous-requêtes
doivent être des requêtes qui ne sont pas immédiatement évaluées afin que leur évaluation puisse être reportée jusqu'à ce que la requête externe soit exécutée. get()
ne correspond pas à la facture car il est exécuté immédiatement et renvoie une instance d'objet plutôt qu'un Queryset
.
Cependant, en remplaçant filter
pour get
puis en prenant un [:1]
slice devrait fonctionner :
StatByHour.objects.filter(hour_of_day=OuterRef('hour_filter')).values('hour_of_day')[:1]
Notez comment la référence de champ dans OuterRef est un littéral de chaîne plutôt qu'une variable.
De plus, les sous-requêtes doivent renvoyer une seule colonne et une seule ligne (car elles sont affectées à un seul champ), d'où le values()
et le découpage ci-dessus.
De plus, je n'ai pas utilisé de sous-requête dans un Q
objet encore; Je ne suis pas sûr que cela fonctionnera. Vous devrez peut-être d'abord enregistrer la sortie de la sous-requête dans une annotation, puis l'utiliser pour vos calculs de filtre.