Como posso converter um Django QuerySet em uma lista de dicts? Não encontrei uma resposta para isso, então estou me perguntando se estou perdendo algum tipo de função auxiliar comum que todos usam.
122
Use o .values()
método:
>>> 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: o resultado é um QuerySet
que geralmente se comporta como uma lista, mas não é realmente uma instância de list
. Use list(Blog.objects.values(…))
se você realmente precisar de uma instância de list
.
values()
retornar, passando-os como argumentos. Também tenha cuidado, embora pareça que os valores retornam uma lista de dados, na verdade, é um<class 'django.db.models.query.ValuesQuerySet'>
e não uma lista.values()
, não sei se existe um bom método para fazer o mesmo,values()
mas também com a chamada dos métodos de instância ?!O
.values()
método retornará um resultado do tipoValuesQuerySet
que normalmente é o que você precisa na maioria dos casos.Mas, se desejar, você pode transformar
ValuesQuerySet
em uma lista Python nativa usando a compreensão de lista Python, conforme ilustrado no exemplo abaixo.Acho que o acima ajuda se você estiver escrevendo testes de unidade e precisar afirmar que o valor de retorno esperado de uma função corresponde ao valor de retorno real, caso em que ambos
expected_result
eactual_result
devem ser do mesmo tipo (por exemplo, dicionário).fonte
list(result)
Se você precisar de tipos de dados nativos por algum motivo (por exemplo, serialização JSON), esta é minha maneira rápida e suja de fazer isso:
Como você pode ver, construir o dict dentro da lista não é realmente SECO, então se alguém conhece uma maneira melhor ...
fonte
data = list( blogs )
e entãojson.dumps( data )
. Um array sai com um monte de objetos do lado do javascript, nenhuma análise necessária.Você não define exatamente a aparência dos dicionários, mas provavelmente está se referindo a
QuerySet.values()
. Da documentação oficial do Django :fonte
Digite o elenco para a lista
fonte
Você pode usar o
values()
método no dict obtido no campo do modelo do Django no qual faz as consultas e, então, pode acessar facilmente cada campo por um valor de índice.Chame assim -
fonte
Você precisa
DjangoJSONEncoder
elist
fazer o seuQueryset
parajson
, ref: Python JSON serializar um objeto Decimalfonte
Basta colocar
list(yourQuerySet)
.fonte
Você pode definir uma função usando model_to_dict da seguinte maneira:
fonte