我在模型中有一个工作(但很难看)的方法:
@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 :(得分:0)
使用dict的setdefault()
方法:
ordered_tasks = {}
for task in tasks:
ordered_tasks.setdefault(task.parent.pk, {'parent': task.parent,
'tasks': []}
)['tasks'].append(task)