我有一个代表任务的ToDo模型。每个任务都属于一个组织,该组织内的一个团队和一个员工。
这是我在视图中过滤任务的方式:
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})
有没有办法,我可以创建dicts,并将上面的6行替换为1或2?
答案 0 :(得分:1)
使用dict和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})