Django, Gruppierung Abfrageelemente
-
22-09-2019 - |
Frage
sage ich solches Modell haben:
class Foo(models.Model):
name = models.CharField("name",max_length=25)
type = models.IntegerField("type number")
, nachdem er einige Abfrage wie Foo.objects.filter tun (), möchte ich zu einer Gruppe das Abfrageergebnis als solche:
[ [{"name":"jb","type:"whiskey"},{"name":"jack daniels","type:"whiskey"}],
[{"name":"absolute","type:"vodka"},{name:"smirnoff ":"vodka"}],
[{name:"tuborg","type":beer}]
]
So wie Sie sehen können, Elemente als Liste der Wörterbücher zu gruppieren. Liste der Gruppenabfragelisten intead von Wörterbuch wäre auch willkommen:)
Viele Grüße
Lösung
Sie können mit itertools.groupby()
der Gruppierung Ihrer Ansicht nach tun.
Andere Tipps
Sie können dies mit der values
Methode eines queryset:
http://docs.djangoproject.com/ de / 1.1 / ref / models / querysets / # Werte-Felder
Werte (* Felder)
Gibt eine ValuesQuerySet - ein QuerySet dass auswertet, um eine Liste von Wörterbücher statt Modell-Instanz Objekte.
Schauen Sie sich die Neugruppierung Template-Tag. Wenn Sie die Gruppierung für die Anzeige in der Vorlage tun wollen, dann sollte das sein, was Sie brauchen. Ansonsten können Sie die Quelle lesen, um zu sehen, wie sie die Gruppierung erreichen.
Sie können diese Art von tun, indem order_by mit:
Foo.objects.order_by( "type" );
drinks = Foo.objects.all( )
Jetzt haben Sie eine Auswahl an Getränken nach Typ geordnet. Sie könnten dies nutzen oder eine Funktion schreiben, die Struktur, die Sie erstellen möchten, ohne es mit einem linearen Scan sortieren zu müssen.