Truy vấn con
cần phải là các truy vấn không được đánh giá ngay lập tức để việc đánh giá của chúng có thể bị hoãn lại cho đến khi truy vấn bên ngoài được chạy. get()
không phù hợp với hóa đơn vì nó được thực thi ngay lập tức và trả về một cá thể đối tượng chứ không phải là Queryset
.
Tuy nhiên, thay thế filter
cho get
và sau đó lấy [:1]
Slice sẽ hoạt động:
StatByHour.objects.filter(hour_of_day=OuterRef('hour_filter')).values('hour_of_day')[:1]
Lưu ý cách tham chiếu trường trong OuterRef là một chuỗi ký tự chứ không phải là một biến.
Hơn nữa, các truy vấn con cần trả về một cột và một hàng (vì chúng được gán cho một trường), do đó, các giá trị values()
và phần trên.
Ngoài ra, tôi chưa sử dụng truy vấn con trong Q
đối tượng chưa; Tôi không chắc nó sẽ hoạt động. Trước tiên, bạn có thể phải lưu kết quả truy vấn con trong một chú thích và sau đó sử dụng nó cho các tính toán bộ lọc của mình.