2015-04-02 38 views
1

我一个模型中有一个工作(但丑陋的)方法:Django |从查询获得的有序字典有关系

@classmethod 
def get_tasks(cls, user): 
    tasks = cls.objects\ 
     .filter(agent=user)\ 
     .prefetch_related('parent', 'agent') 
    ordered_tasks = {} 
    for task in tasks: 
     if task.parent.pk not in ordered_tasks: 
      ordered_tasks[task.parent.pk] = { 
       'parent': task.parent, 
       'tasks': [] 
      } 
     ordered_tasks[task.parent.pk]['tasks'].append(task) 
    return ordered_tasks 

它的工作好,但我敢肯定有一个更好的解决方案,具有相同的结果。

任何想法引导我?

回答

0

使用字典的setdefault()方法:

ordered_tasks = {} 
for task in tasks: 
    ordered_tasks.setdefault(task.parent.pk, {'parent': task.parent, 
               'tasks': []} 
          )['tasks'].append(task) 
+0

感谢您的答复,比我漂亮的条件;) 没有办法解决产生这样的结果只能用Django的ORM? – HarmO 2015-04-03 07:37:40