如何在Python中填充另一个列表中的循环列表?
我正在Django上创建一个搜索页面,并希望生成一个动态查询集 我有一个字符串筛选器列表,初始化如下:如何在Python中填充另一个列表中的循环列表?,python,django,list,foreach,request,Python,Django,List,Foreach,Request,我正在Django上创建一个搜索页面,并希望生成一个动态查询集 我有一个字符串筛选器列表,初始化如下: filter_clauses = [Q(filter=request.GET.get(filter)) for filter in filter_names if request.GET.get(filter)] filter\u name=('filter1','filter2') 然后,我想在我的fi
filter_clauses = [Q(filter=request.GET.get(filter))
for filter in filter_names
if request.GET.get(filter)]
filter\u name=('filter1','filter2')
然后,我想在我的filter\u names列表中循环,并为请求中的每个过滤器创建一个Q对象列表(filter\u names中的名称相同)。我正在创建Q列表,如下所示:
filter_clauses = [Q(filter=request.GET.get(filter))
for filter in filter_names
if request.GET.get(filter)]
问题在于结果列表(filter_子句)类似于:
Q(filter=value1),
Q(filter=value2)
但实际上我想要一个如下的列表:
Q(filter1=value1),
Q(filter2=value2)
实际上,循环不是捕获变量filter的值,而是将其解释为“filter”
那么,我在循环中是否做错了什么?
关于更多信息,我从中吸取了这个想法,我得到了以下错误:
无法将关键字“filter”解析为字段
这意味着框架正在搜索名为“filter”的搜索模型中的字段,但显然找不到该字段。您可以使用关键字参数解包:
filter_clauses = [Q(**{filter: request.GET.get(filter)})
for filter in filter_names
if request.GET.get(filter)]
这里,
filter
的值是字典中的键,因此当您解包参数时,参数名称将是filter1
等。您可以使用关键字参数解包:
filter_clauses = [Q(**{filter: request.GET.get(filter)})
for filter in filter_names
if request.GET.get(filter)]
在这里,filter
的值是字典中的键,因此当您解压缩参数时,参数名将是filter1
等