我有一个模型Quest
,它有一个字段type
。我希望有一个将type
映射到Quest
列表的字典。我目前的做法是迭代所有Quest
个对象并将它们附加到列表中。
from collections import defaultdict
quests = Quest.objects.all()
dictionary = defaultdict(list)
for quest in quests:
dictionary[quest.type].append(quest)
我想知道Django QuerySet
是否有更好的方法来做到这一点。我查了aggregation()
,value_list()
和values()
,但他们似乎没有达到我想要做的目的。
答案 0 :(得分:0)
我不知道任何此类django QuerySet
功能。但是,您可以使用该查询按type
对您的任务进行排序,这样您就可以在dict
理解中使用itertools.groupby
,而无需在Python中进行排序:
from itertools import groupby
quests = Quest.objects.all().order_by('type')
dictionary = {k: list(g) for k, g in groupby(quests, key=lambda q: q.type)}