2010-11-28 101 views
21

我试图做一个django查询,但有几个不同的WHERE参数的可能性。所以我想在做类似的:使用字符串作为Django过滤器查询的参数

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

这里上市是在我的模型中定义的,它包含了许多对多场“SUBCAT”。但是,这会引发ValueError,因为筛选器不接受字符串作为其参数。 Python中有没有一种方法将字符串评估为其内容而不是字符串?就像打印语句一样,它将内联字符串的值打印出来,而不是输出到标准输出。

顺便说一句,我不只是做

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

的原因是,我并不总是滤波subcat__id,有时它是一个或多个其他参数,我宁愿没有到写出一系列由if语句控制的单独查询。任何意见非常感谢。

回答

52

也许......

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

完美,这正是我一直在寻找!非常感谢。 – danny 2010-11-28 03:41:59

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