[django-brasil] QuerySet para Dict

482 views
Skip to first unread message

Leonardo S

unread,
Mar 31, 2013, 10:33:20 PM3/31/13
to django...@googlegroups.com
Galera,

Estou tentando transformar um QuerySet (que no caso é um ValuesQuerySet) para um dict, mas sem sucesso. Todas as opções que estou vendo pela web continua resultando em um QuerySet.

>>> type(qs.values_list())
<class 'django.db.models.query.ValuesListQuerySet'>
>>> type(qs.values())
<class 'django.db.models.query.ValuesQuerySet'>
>>> type(qs.all())
<class 'django.db.models.query.ValuesQuerySet'>

Isso pode ser feito manualmente através de iteração ou programação funcional.
Mas estou curioso. Não há nenhuma maneira imediata de transformar um queryset em dict ?

Abs,

luan fonceca

unread,
Mar 31, 2013, 10:41:35 PM3/31/13
to django...@googlegroups.com
O resultado do values() é uma ValuesQuerySet, tipo uma lista, com dicts dentro, porém é de um tipo diferente pois ele tem outros métodos...
mas cada item de uma ValuesQuerySet é um dict comum, ou seja, cada registro retornado na sua query, é um item dessa ValuesQuerySet , que é parseado pra dict.

>>> type(qs)
<class 'django.db.models.query.ValuesQuerySet'>
>>> type(qs[0])
<type 'dict'>


--
Você está recebendo esta mensagem porque se inscreveu no grupo "Django Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para django-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 



--
  • Software Engineering student at the Universidade Federal do Rio Grande do Norte;
  • Front-end Designer and Developer;
  • Python/Django Developer at the multmeio.com.br.

Leonardo S

unread,
Mar 31, 2013, 11:09:03 PM3/31/13
to django...@googlegroups.com
Ah show de bola.
Valeu! 

Isso levou a uma outra questão.
Ao transformar em dict, percebi que perdi a ordenação. Vai para o template de qualquer jeito.

Estou transformando em dict para poder acrescentar uma nova chave, que é obtida através de cálculos dos valores de cada elemento do dict.
Mas perco a ordenação.

Não há uma maneira de manter uma ordenação ?

luan fonceca

unread,
Mar 31, 2013, 11:16:21 PM3/31/13
to django...@googlegroups.com
E por que nao mandar o objeto "qs" por sí só?!
você pode definir essa nova chave, como uma property no Model da sua entidade ai e passar o Queryset para o template e interar da mesma forma que iteraria uma lista de dicts

Leonardo S

unread,
Mar 31, 2013, 11:35:18 PM3/31/13
to django...@googlegroups.com
Valeu. Tranquilo. Já resolvi. Refiz a query para retornar uma lista, que é ordenada.

Eu não estou retornando models. Estou fazendo uma query agregada, tipo:

Book.objects.values('author').annotate(livros_publicados=Count('author')).filter(categoria=categoria)

Retorna um ValuesQuerySet. É como se fizesse um 
SELECT author, count(author) as livros_publicados FROM books WHERE categoria = categora_passada_por_parâmetro
Aí resulta:
[{'author': 'Autor 1', 'livros_publicados': 50}, {'author': 'Autor 2', 'livros_publicados': 23}, .... ]

Abs,




luan fonceca

unread,
Mar 31, 2013, 11:36:03 PM3/31/13
to django...@googlegroups.com
Ata, massa então!

Reply all
Reply to author
Forward
0 new messages