Django创建一个dict,其中模型字段的值为键,模型实例为值

时间:2016-06-06 06:45:09

标签: python django django-queryset

我有一个模型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(),但他们似乎没有达到我想要做的目的。

1 个答案:

答案 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)}