2016-06-06 5 views
0

Ich habe ein Modell Quest und es hat ein Feld type. Ich möchte ein Diktat haben, das type zu einer Liste von Quest mappt. Meine derzeitige Art, dies zu tun, besteht darin, alle Quest Objekte zu durchlaufen und sie an die Liste anzuhängen.Django erstellen ein Dict mit Werten eines Modellfeldes als Schlüssel und Modellinstanz als Wert

from collections import defaultdict 

quests = Quest.objects.all() 
dictionary = defaultdict(list) 
for quest in quests: 
    dictionary[quest.type].append(quest) 

Ich frage mich, ob Django QuerySet eine bessere Art und Weise hat es zu tun. Ich schaute nach oben aggregation(), value_list() und values(), aber sie scheinen nicht zu erreichen, was ich tun möchte.

Antwort

0

Mir ist keine solche Django QuerySet Funktionalität bekannt. Sie könnten jedoch verwenden die Abfrage bereits Ihre Aufgaben zu bestellen, indem type, so dass Sie itertools.groupby in einem dict Verständnis ohne in Python zu sortieren, die verwendet werden können:

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)} 
Verwandte Themen