使用字符串作为Django过滤器查询的参数

时间:2010-11-28 00:53:10

标签: django django-queryset

我正在尝试执行django查询,但可能会有几个不同的WHERE参数。所以我想做的事情如下:

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

此处列表在我的模型中定义,它包含多对多字段subcat。但是,这会引发ValueError,因为过滤器不接受字符串作为其参数。 Python中是否有一种方法可以将字符串作为其内容而非字符串进行求值?像print语句一样打印字符串的内联值而不是标准输出。

顺便说一下,我不仅仅这样做的原因

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

是我并不总是过滤subcat__id,有时它是一个或几个其他参数,我宁愿不必写出一堆由if语句控制的独立查询。任何建议都非常感谢。

2 个答案:

答案 0 :(得分:56)

...也许

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

答案 1 :(得分:9)

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