Comment puis-je convertir un Django QuerySet en une liste de dictionnaires? Je n'ai pas trouvé de réponse à cela, alors je me demande s'il me manque une sorte de fonction d'assistance commune que tout le monde utilise.
122
Utilisez la .values()
méthode:
>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]
Remarque: le résultat est un QuerySet
qui se comporte principalement comme une liste, mais n'est pas en fait une instance de list
. À utiliser list(Blog.objects.values(…))
si vous avez vraiment besoin d'une instance de list
.
values()
renvoyer en les transmettant comme arguments. Faites également attention bien que cela ressemble à des valeurs qui renvoie une liste de dictionnaires, c'est en fait un a<class 'django.db.models.query.ValuesQuerySet'>
et non une liste.values()
, je ne sais pas s'il existe une bonne méthode pour faire la même chose quevalues()
mais aussi avec l'appel des méthodes d'instance?!La
.values()
méthode vous renverra un résultat de typeValuesQuerySet
qui est généralement ce dont vous avez besoin dans la plupart des cas.Mais si vous le souhaitez, vous pouvez vous transformer
ValuesQuerySet
en une liste Python native en utilisant la compréhension de liste Python comme illustré dans l'exemple ci-dessous.Je trouve que ce qui précède aide si vous écrivez des tests unitaires et devez affirmer que la valeur de retour attendue d'une fonction correspond à la valeur de retour réelle, auquel cas les deux
expected_result
etactual_result
doivent être du même type (par exemple, dictionnaire).la source
list(result)
Si vous avez besoin de types de données natifs pour une raison quelconque (par exemple, la sérialisation JSON), c'est ma façon rapide et sale de le faire:
Comme vous pouvez le voir, construire le dict à l'intérieur de la liste n'est pas vraiment SEC, donc si quelqu'un connaît un meilleur moyen ...
la source
data = list( blogs )
et ensuitejson.dumps( data )
. Un tableau sort avec un tas d'objets du côté javascript, aucune analyse nécessaire.Vous ne définissez pas exactement à quoi devraient ressembler les dictionnaires, mais vous faites très probablement référence
QuerySet.values()
. De la documentation officielle de django :la source
Tapez Cast to List
la source
Vous pouvez utiliser la
values()
méthode sur le dict que vous avez obtenu à partir du champ de modèle Django sur lequel vous effectuez les requêtes, puis vous pouvez facilement accéder à chaque champ par une valeur d'index.Appelez ça comme ça -
la source
Vous avez besoin
DjangoJSONEncoder
etlist
pour rendre votreQueryset
tojson
, ref: Python JSON sérialise un objet Decimalla source
En termes simples
list(yourQuerySet)
.la source
Vous pouvez définir une fonction en utilisant model_to_dict comme suit:
la source