2010-11-28 15 views
21

Bir django sorgusu yapmaya çalışıyorum, ancak birkaç farklı WHERE parametresi olasılığı var.Django filtre sorgusuna bir dize olarak bir dize kullanma

İşte
querystring = "subcat__id__in=[1,3,5]" 
Listing.objects.filter(querystring) 

İlanı benim modelinde tanımlanan ve çoğu-çok alanı "Subcat" içerir: Ben böyle bir şey yaptığını düşünüyordum. Ancak, bu bir ValueError'ı yükseltir çünkü filtre argümanı olarak bir dizeyi kabul etmez. Python'da, bir dizgeden ziyade sadece içeriği olarak değerlendirilen bir dizeye sahip olmanın bir yolu var mı? Standart çıktının yerine dizginin satır içi değerini yazdıran bir yazdırma ifadesi gibi bir şey. Bu arada

, sadece

querystring = [1,3,5] 
Listing.objects.filter(subcat__id__in=querystring) 

yapmayın sebebi hep bazen bir veya birkaç diğer parametreleri var, subcat__id için filtreleme değilim ve ben daha çok gerek ediyorum ki İfadeler tarafından kontrol edilen bir grup ayrı soruyu yazınız. Herhangi bir tavsiye çok takdir edilmektedir. Belki

cevap

52

...

filter_dict = {'subcat__id__in': [1,3,5]} 
Listing.objects.filter(**filter_dict) 
+0

Mükemmel, ben aradığı şeyi tam olarak bu! Çok teşekkürler. – danny

+0

@danny Kabul edilen cevap o zaman? P = –

9
Listing.objects.filter(**{"subcat__id__in": ast.literal_eval("[1,3,5]")})