2013-08-31 43 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