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

wfveoks0  于 2023-06-25  发布在  Go
关注(0)|答案(3)|浏览(154)

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

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

这里Listing是在我的模型中定义的,它包含Many-To-Many字段subcat。但是,这会引发ValueError,因为filter不接受字符串作为其参数。在Python中有没有一种方法可以让一个字符串只作为它的内容而不是字符串来计算?类似于print语句的东西,它将字符串的值内联打印,而不是打印到标准输出。
顺便说一句,我之所以不

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

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

lymnna71

lymnna711#

也许...

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

bqujaahr2#

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

uplii1fm3#

你可以这样做一个OR查询:

from functools import reduce
from operator import or_

query_as_dict = {"subcat__id__in": [1,3,5], "cat__id": 9}
query = reduce(or_, (Q(**{key: value}) for key, value in query_as_dict.items()))
Listing.objects.filter(query)

相关问题