2012-01-03 29 views
1

我有一個頁面,返回一個項目的列表,因爲如果大的列表我已經把一些過濾器的形式放在它的頂部,讓用戶縮小他們的視圖到他們想要的。他們可以從幾個下拉列表中選擇數值,或將它們留空。所以說到請求:Django的建設對象過濾GET參數

/projects/?group=1&project_phase= 

空project_phase過濾

/projects/?group=1&project_phase=2 

與定義的項目過濾

的名字正是我能夠來定義屬性。過濾()。

我被困在過濾器字符串放在一起的過濾器 - 是否有一種通用的方式來做到這一點?

回答

2

也許你可以使用:

parameters = {field_name: value for field_name, value in request.GET.items() 
       if value and field_name in model._meta.get_all_field_names()} 
model.objects.filter(**parameters) 

正如下面的意見建議,有AER一對夫婦檢查,忽略不需要參數:

  • 字段名稱未在規定

    • 空值模型

    這應該傳遞GET請求中的所有參數t按照您的預期方式轉換爲filter方法。

  • +0

    @美國洛特感謝您的評論。我編輯了我的答案,以刪除空的參數,以便在「過濾器」調用中忽略它們。 – jcollado 2012-01-04 00:12:55

    +0

    這是否工作? – Arthur 2012-01-04 00:54:03

    +0

    此外,增加一些檢查是有意義的,例如GET中的參數可以在'filter'中使用。否則'過濾器'將失敗,給500服務器錯誤。 – demalexx 2012-01-04 04:11:14

    0

    你可以連續使用的過濾器,以及(這是假的,但應該給你的想法):