Saya mencoba mencari cara untuk menulis kueri gaya 'tidak dalam' di django. Misalnya, struktur kueri yang saya pikirkan akan terlihat seperti ini.
select table1.*
from table1
where table1.id not in
(
select table2.key_to_table1
from table2
where table2.id = some_parm
)
Seperti apa sintaks django yang mengasumsikan model disebut table1 dan table2?
Objs=Tbl1.objects.filter(...); IDs=Objs.values_list('id', flat=True); Objs.delete(); Tbl2.objects.filter(id__in=IDs')
Ini tidak berhasil karena ID sebenarnya adalah objek QuerySet. Ketika saya menghapus baris asalnya, itu tidak lagi berfungsi dengan kueri lain. Solusinya adalahTbl2.objects.filter(id__in=list(IDs))
- mengubahnya menjadi daftarannotate()
(waktu itu memberi saya 1.0497902309998608 vs 0.00514069400014705)dengan model ini:
Anda harus mendapatkan apa yang ingin Anda gunakan:
sumber
sumber
Anda dapat menulis pencarian kustom untuk query Django:
Dari dokumentasi : "Mari kita mulai dengan kebiasaan lookup sederhana Kami akan menulis kustom lookup ne yang bekerja berlawanan dengan membalas . Author.objects.filter (name__ne = 'Jack') akan menerjemahkan ke SQL:
"author"."name" <> 'Jack'
"sumber
Atau lebih baik
sumber