2013-08-31 46 views
0

我有一個ToDo模型,它代表一個任務。每項任務都屬於一個組織,該組織內的一個團隊和一名工作人員。在django中優化模型查找

這是我的篩選任務,在訪問量:

def task_list(request, param=None, param_id=None): 
    if param == "org": 
     tasks = ToDo.objects.filter(org__id = param_id).exclude(todo_status=4) 
    elif param == "orgstaff": 
     tasks = ToDo.objects.filter(assigned_to__id = param_id).exclude(todo_status=4) 
    elif param == "orgteam": 
     tasks = ToDo.objects.filter(team__id = param_id).exclude(todo_status=4) 
    return render(request, "task_list.html", {"tasks":tasks}) 

有沒有一種方法,我可以創建類型的字典,並更換這些上述6行到1或2?

回答

1

使用字典和dict unpacking

def task_list(request, param=None, param_id=None): 
    field_mapping = {'org': 'org__id', 'orgstaff': 'assigned_to__id', 'orgteam': 'team__id'} 
    tasks = ToDo.objects.filter(**{field_mapping[param]: param_id}).exclude(todo_status=4) 
    return render(request, "task_list.html", {"tasks":tasks}) 
+0

能否請您解釋一下 - '** {field_mapping [參數]:param_id}'。感謝你的回答。特別是**做了什麼? – user1629366

+0

@ user1629366,'add(** {'a':1,'b':2})'類似於'add(a = 1,b = 2)'。我建議你閱讀Python教程中的[解包參數列表](http://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists)。 – falsetru

+0

謝謝,會閱讀並理解。 – user1629366