2017-04-02 100 views
0

我有幾個參數: 年齡,身高,體重等。django python優化過濾查詢

我需要使用此參數進行搜索。現在 我能做到這一點是這樣的:

persons.vip = Person.get_vip() 
params.search.age = request.GET.get('age') 
    if params.search.age: 
     range = params.search.age 
     persons.vip = persons.vip.filter(age__gte=range) 
    else: 
     do somethin 

params.search.weight= request.GET.get('weight') 
    if params.search.weight: 
     range = params.search.weight 
     persons.vip = persons.vip.filter(age__gte=range) 
    else: 
     do somethin 

而對於其他PARAMS像高度等相同的代碼塊。

如何優化此代碼並擺脫代碼重複?

回答

0

這取決於你的do somethin塊做什麼。

如果我們可以假設它是空的,你可以有一個簡單的地圖,如:

param_filters_map = { 
    'weight': 'age__gte', 
    'height': 'weight__gte', 
    ...} 

然後遍歷它:

for request_param_name, filter_name in param_filters_map.items(): 
    request_param = request.GET.get(request_param_name): 
    if request_param: 
     persons.vip = persons.vip.filter(**{filter_name: request_param}) 

如果它不是空的,比我會盡量想如果可以在之前的之前的參數循環中應用邏輯(如果存在一些我們應該用請求參數覆蓋的缺省行爲)。