2017-04-02 52 views
0

我正在Django上創建一個搜索頁面,並且想要生成一個動態查詢集。如何在Python中的另一個列表中填充列表循環?

我有串過濾器的列表initiaized這樣的:

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,而且我得到這個錯誤:

Cannot resolve keyword 'filter' into field.

,這意味着,該框架在名爲「搜索模式搜索字段過濾器「,並顯然沒有找到它。

回答

2

您可以使用關鍵字參數拆包:

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

這裏filter在字典中的關鍵,所以,當你解壓的參數,參數名稱將是filter1

相關問題