Django sütunların dinamik bir dizi sorgulamak için Temizleyici yolu?

oy
0

Benim durumumda, ben bir formdan gelen sütun adlarının bir dizi var. Ben hepsi doğru emin olmak için filtre etmek istiyorum. İşte şu anda bunun için gereken adımları:

for op in self.cleaned_data['options']:
    cars = cars.filter((op, True))

Şimdi çalışıyor ama vardır vardır olası ~ 40 sütun test edilecek ve nedenle sorgulama tutmak için çok verimli görünmüyor.

Bir filtre sorgusu içine bu yoğunlaşmak bir yolu var mı?

Oluştur 09/12/2008 saat 18:00
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
9

Bir sözlük olarak sorgu oluşturun ve filtre yöntemine anahtar kelime bağımsız değişkenleri olarak seçeneklerini açmak için ** operatörünü kullanabilirsiniz.

op_kwargs = {}
for op in self.cleaned_data['options']:
    op_kwargs[op] = True
cars = CarModel.objects.filter(**op_kwargs)

Bu kaplıdır Django belgeleri ve üzerinde katedilmiştir SO de.

Cevap 09/12/2008 saat 18:37
kaynak kullanıcı

oy
3

Django'nın sorgu setleri tembeldir, peki şu anda yapıyoruz aslında oldukça verimlidir. Eğer bazı kodunu düzenlemek etmediğini, yani varsayarak ... QuerySet alanlardan birini erişmeye çalıştığınızda, ve böyle etkili bir şekilde olana kadar veritabanı vurmak olmayacaktır:

cars = CarModel.objects.all()
for op in self.cleaned_data['options']:
    cars = cars.filter((op, True))

Daha fazla bilgi burada .

Cevap 09/12/2008 saat 21:57
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more