Subquery
perlu query yang tidak segera dievaluasi sehingga evaluasinya dapat ditunda sampai outer query dijalankan. get()
tidak sesuai dengan tagihan karena dieksekusi segera dan mengembalikan instance objek daripada Queryset
.
Namun, mengganti filter
untuk get
dan kemudian mengambil [:1]
irisan harus bekerja:
StatByHour.objects.filter(hour_of_day=OuterRef('hour_filter')).values('hour_of_day')[:1]
Perhatikan bagaimana referensi bidang dalam OuterRef adalah literal string, bukan variabel.
Selain itu, subquery perlu mengembalikan satu kolom dan satu baris (karena mereka ditugaskan ke satu bidang), maka values()
dan irisan di atas.
Juga, saya belum pernah menggunakan subquery dalam Q
objek belum; Saya tidak yakin itu akan berhasil. Anda mungkin harus menyimpan output subquery dalam anotasi terlebih dahulu, lalu menggunakannya untuk penghitungan filter Anda.