¿Cómo puedo convertir un Django QuerySet en una lista de dicts? No he encontrado una respuesta a esto, así que me pregunto si me falta algún tipo de función de ayuda común que todos usan.¿Cómo convierto un Django QuerySet en una lista de dictados?
Respuesta
Utilice el método .values()
:
>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]
Nota: el resultado es un QuerySet
que en su mayoría se comporta como una lista, pero no es realmente una instancia de list
. Use list(Blog.objects.values(…))
si realmente necesita una instancia de list
.
No define exactamente cómo deberían ser los diccionarios, pero lo más probable es que se refiera a QuerySet.values()
. Desde el official django documentation:
Devuelve una
ValuesQuerySet
- una subclaseQuerySet
que devuelve diccionarios cuando se utiliza como iterable, en vez de modelo de instancia objetos.Cada uno de esos diccionarios representa un objeto, con las claves correspondientes a los nombres de los atributos de los objetos del modelo.
El método .values()
le devolverá un resultado del tipo ValuesQuerySet
que generalmente es lo que necesita en la mayoría de los casos.
Pero si lo desea, puede convertir ValuesQuerySet
en una lista nativa de Python utilizando la comprensión de la lista de Python como se ilustra en el siguiente ejemplo.
result = Blog.objects.values() # return ValuesQuerySet object
list_result = [entry for entry in result] # converts ValuesQuerySet into Python list
return list_result
encuentro la anterior ayuda si está escribiendo pruebas de unidad y la necesidad de afirmar que el valor de retorno esperado de una función coincide con el valor de retorno real, en cuyo caso tanto expected_result
y actual_result
deben ser del mismo tipo (por ejemplo, diccionario).
actual_result = some_function()
expected_result = {
# dictionary content here ...
}
assert expected_result == actual_result
O puede simplificar la conversión a la lista con esta 'lista (resultado)' –
Usted puede utilizar el método values()
en el dict que tienes desde el campo de modelo de Django a tomar las consultas sobre y luego se puede acceder fácilmente a cada campo por un valor de índice.
llamada como este -
myList = dictOfSomeData.values()
itemNumberThree = myList[2] #If there's a value in that index off course...
Si necesita tipos de datos nativos por alguna razón (por ejemplo, la serialización JSON) este es mi 'n' manera sucia y rápida de hacerlo:
data = [{'id': blog.pk, 'name': blog.name} for blog in blogs]
Como puede ver, la construcción del dict dentro de la lista no es realmente DRY así que si alguien conoce una mejor manera ...
- 1. Django - Lista única de QuerySet
- 2. Cómo convertir un QuerySet Django a una lista
- 3. ¿Cómo convierto un QuerySet de django en una matriz de registro numpy?
- 4. cómo renderizar un Queryset en una plantilla de tabla-django
- 5. ¿Qué es un django QuerySet?
- 6. ¿Cómo puedo probar un queryset vacío en Django?
- 7. Orden Django QuerySet
- 8. Django: filtro para get_foo_display en un Queryset
- 9. cómo subconsultar en queryset en django?
- 10. Django filter on queryset intersection?
- 11. Obtener el SQL de un Django QuerySet
- 12. Filter Queryset en Django inlineformset_factory
- 13. ¿Cómo puedo hacer un accesorio de QuerySet en django?
- 14. Modificar queryset predeterminado en django
- 15. Django QuerySet filter + order_by + limit
- 16. ¿Cómo obtener la siguiente fila en un queryset django?
- 17. Comprobación de queryset vacío en Django
- 18. Filtros de Django Custom Queryset
- 19. ¿Cómo convierto una enumeración en una lista en C#?
- 20. django - pidiendo queryset por un campo calculado
- 21. ¿Cómo convierto una cadena en una lista en Io?
- 22. ¿Cómo convierto una lista en una tupla en Haskell?
- 23. impresión Django QuerySet SQL con ""
- 24. Pedido personalizado Django QuerySet por ID
- 25. Anulación queryset defecto en Django administrador
- 26. Cómo filtrar queryset en changelist_view en django admin?
- 27. Cómo filtrar un queryset django utilizando una matriz en un campo como "IN" de SQL?
- 28. queryset Django para muchos-a-muchos coloca
- 29. Cómo usar django annotate() y aggregate() para agrupar un queryset?
- 30. ¿Cómo convierto caracteres de cadena en una lista?
sí, usted especifica qué campos quiere que 'values ()' devuelva pasándolos como argumentos. También tenga cuidado, aunque parezca que values devuelve una lista de dicts, en realidad es una '' y no una lista. –
dm03514
esto en realidad no devuelve una lista aunque – astreltsov
¡Gracias! Actualizado. –