Django |从查询中获取有关的dict命令

时间:2015-04-02 15:26:49

标签: python 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

它也有效,但我确信有更好的解决方案可以获得相同的结果。

有什么想法引导我吗?

1 个答案:

答案 0 :(得分:0)

使用dict的setdefault()方法:

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