【问题标题】:How to populate a list looping in another list in Python?如何在 Python 中填充另一个列表中循环的列表?
【发布时间】:2017-08-27 12:43:18
【问题描述】:

我正在 Django 上创建一个搜索页面,并希望生成一个动态查询集。

我有一个这样初始化的字符串过滤器列表:

filter_names = ('filter1', 'filter2')

然后,我想在我的 filter_names 列表中循环,并为请求中的每个过滤器创建一个 Q 对象列表(在 filter_names 中具有相同的名称)。我正在创建这样的 Q 列表:

filter_clauses = [Q(filter=request.GET.get(filter))
                      for filter in filter_names
                      if request.GET.get(filter)]

问题在于结果列表 (filter_clauses) 类似于:

Q(filter=value1),
Q(filter=value2)

但我实际上想要一个类似的列表:

Q(filter1=value1),
Q(filter2=value2)

实际上,循环并没有捕获变量过滤器的值,而是将其解释为“过滤器”。

那么,我在循环中做错了吗?

有关更多信息,我从answer 中获得了这个想法,我收到了这个错误:

无法将关键字“过滤器”解析为字段。

这意味着,框架正在搜索的模型中搜索名为“filter”的字段,但显然没有找到。

【问题讨论】:

    标签: python django list foreach request


    【解决方案1】:

    您可以使用关键字参数解包:

    filter_clauses = [Q(**{filter: request.GET.get(filter)})
                          for filter in filter_names
                          if request.GET.get(filter)]
    

    这里filtervalue是字典中的key,所以当你解包参数的时候,参数名会是filter1等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      相关资源
      最近更新 更多