itertools.groupby()
идеально подходит для этого. Я предполагаю, что Task
и Category
каждый имеет атрибут name
, по которому вы хотите их отсортировать. Я не знаю API Django, поэтому вы, вероятно, захотите перенести сортировку в запрос db, и вам нужно будет посмотреть атрибуты виджета, чтобы выяснить, как получить доступ к объектам задачи, но вот основная формула:
from itertools import groupby
# sort first since groupby only groups adjacent items
tasks.sort(key=lambda task: (task.category.name, task.name))
for category, category_tasks in groupby(tasks, key=lambda task: task.category):
print '%s:' % category.name
for task in category_tasks:
print '* %s' % task.name
Это должно напечатать список как:
Breakfast foods:
* eggs
* spam
Dinner foods:
* spam
* spam
* spam
НТН