2010-11-28 164 views
21

我試圖做一個django查詢,但有幾個不同的WHERE參數的可能性。所以我想在做類似的:使用字符串作爲Django過濾器查詢的參數

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

這裏上市是在我的模型中定義的,它包含了許多對多場「SUBCAT」。但是,這會引發ValueError,因爲篩選器不接受字符串作爲其參數。 Python中有沒有一種方法將字符串評估爲其內容而不是字符串?就像打印語句一樣,它將內聯字符串的值打印出來,而不是輸出到標準輸出。

順便說一句,我不只是做

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

的原因是,我並不總是濾波subcat__id,有時它是一個或多個其他參數,我寧願沒有到寫出一系列由if語句控制的單獨查詢。任何意見非常感謝。

回答

52

也許......

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

完美,這正是我一直在尋找!非常感謝。 – danny 2010-11-28 03:41:59

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