Wie kann ich ein Django QuerySet in eine Liste von Diktaten konvertieren? Ich habe keine Antwort darauf gefunden und frage mich, ob mir eine allgemeine Hilfsfunktion fehlt, die jeder verwendet.
122
Verwenden Sie die .values()
Methode:
>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]
Hinweis: Das Ergebnis ist ein Ergebnis, QuerySet
das sich meistens wie eine Liste verhält, aber eigentlich keine Instanz von ist list
. Verwenden list(Blog.objects.values(…))
Sie diese Option, wenn Sie wirklich eine Instanz von benötigen list
.
values()
, indem Sie sie als Argumente übergeben. Seien Sie auch vorsichtig, obwohl es so aussieht, als ob Werte eine Liste von Diktaten zurückgeben, die tatsächlich eine<class 'django.db.models.query.ValuesQuerySet'>
und keine Liste sind.values()
nicht abrufen. Ich weiß nicht, ob es eine gute Methode gibt, um dasselbe zu tun,values()
aber auch, um die Instanzmethoden aufzurufen.Die
.values()
Methode gibt Ihnen ein Ergebnis vom Typ zurück,ValuesQuerySet
das in den meisten Fällen normalerweise benötigt wird.Wenn Sie möchten, können Sie
ValuesQuerySet
mithilfe des Python-Listenverständnisses, wie im folgenden Beispiel dargestellt, eine native Python-Liste erstellen.Ich finde die oben hilft , wenn Sie Unit - Tests und Notwendigkeit, assert schreiben , dass der erwartete Rückgabewert einer Funktion , um den tatsächlichen Rückgabewert übereinstimmt, wobei in diesem Fall beide
expected_result
undactual_result
muß vom gleichen Typ (zB Wörterbuch).quelle
list(result)
Wenn Sie aus irgendeinem Grund native Datentypen benötigen (z. B. JSON-Serialisierung), ist dies meine schnelle und schmutzige Methode:
Wie Sie sehen können, ist das Erstellen des Diktats in der Liste nicht wirklich trocken. Wenn also jemand einen besseren Weg kennt ...
quelle
data = list( blogs )
und dannjson.dumps( data )
. Ein Array enthält eine Reihe von Objekten auf der Javascript-Seite, ohne dass eine Analyse erforderlich ist.Sie definieren nicht genau, wie die Wörterbücher aussehen sollen, aber höchstwahrscheinlich beziehen Sie sich darauf
QuerySet.values()
. Aus der offiziellen Django-Dokumentation :quelle
Geben Sie Cast to List ein
quelle
Sie können die
values()
Methode für das Diktat verwenden, das Sie aus dem Django-Modellfeld erhalten haben, für das Sie die Abfragen durchführen, und dann können Sie einfach über einen Indexwert auf jedes Feld zugreifen.Nennen Sie es so -
quelle
Sie benötigen
DjangoJSONEncoder
undlist
um diesQueryset
zu erreichenjson
, ref: Python JSON serialisiert ein Dezimalobjektquelle
Einfach gesagt
list(yourQuerySet)
.quelle
Sie können eine Funktion mit model_to_dict wie folgt definieren:
quelle