QuerySet como dictionary

420 views
Skip to first unread message

Fernando

unread,
Nov 24, 2011, 1:00:37 PM11/24/11
to django...@googlegroups.com
Pessoal,

Já li e reli e testei de enecentas formas e empaquei:

Como simplesmente ler um registro do banco e retornar um dictionarie para ler num for seus campos e valores??

Meu ultimo codigo reescrito:
dataCadUsr = Cadastro.objects.filter(user=request.user.id).values('empresa','telefone','setor','comoconheceu')
for campo, valor in dataCadUsr.items():

E os erros variam de acordo com as variações em cima disso.

'ValuesQuerySet' object has no attribute 'items'

Se eu tiro o items(), vira: too many values to unpack 

Imaginei que isso seria o mais simples do que está sendo.



Fernando G. Norte
BHte - MG
cel: +55 31 9119 8814
-------------------------
MSN e Gtalk # fno...@gmail.com

Herson

unread,
Nov 24, 2011, 1:11:01 PM11/24/11
to django...@googlegroups.com
O problema é que você está tentando obter os "items()" do dicionario em uma lista. O metodo values() retorna uma lista de dicionarios, cada dicionario sendo um objeto. Então seu codigio funcionaria desta forma:

Vou dar um exemplo com um modelo que possuo aqui:

>>> from apps.catalog.models import Product
>>> lista_de_dicionario = Product.objects.all()[:5].values('name', 'slug')
>>> for item in lista_de_dicionario:
...     for chave, valor in item.items():
...         print chave, valor
... 
name Felicia
slug felicia
name Andrezza
slug andrezza
name Raffaella
slug raffaella
name Mariella
slug mariella
name Hortensia
slug hortensia


Você percorre os itens da lista e em cada item percorre as chaves e valores do dicionario através do metodo items().


--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>



--
Herson Leite, Desenvolvedor Web
www.hersonls.com.br

Fernando

unread,
Nov 24, 2011, 1:25:31 PM11/24/11
to django...@googlegroups.com
Valeu Herson,

Agora eu entendi, no meu caso bastou colocar a chave [0] no 'for' mesmo
dataCadUsr = Cadastro.objects.filter(user=request.user.id).values('empresa','telefone','setor','comoconheceu')
for campo, valor in dataCadUsr[0].items():

Que coisinha mais chata essa. 
Uma opção simples como pegar um item apenas para listar, ele nem aceita o get(), e no get() não tem função de listar os itens... 
Bom, é a lógica do Django, eu que devo estar mal acostumado.

Fernando G. Norte
BHte - MG
cel: +55 31 9119 8814
-------------------------
MSN e Gtalk # fno...@gmail.com


Jayson Reis

unread,
Nov 24, 2011, 1:35:42 PM11/24/11
to django...@googlegroups.com
Usa dict(retorno)

2011/11/24 Fernando <fno...@gmail.com>

Herson

unread,
Nov 24, 2011, 1:39:48 PM11/24/11
to django...@googlegroups.com
Você tem que tomar cuidado com esse slice "dataCadUsr[0]" porque se a lista não tiver itens irá levantar uma exception. Tenta utilizar uma condição ou try para evitar.

Flavia Missi

unread,
Nov 24, 2011, 2:12:23 PM11/24/11
to django...@googlegroups.com
2011/11/24 Jayson Reis <santos...@gmail.com>
Usa dict(retorno)

No momento que tu faz um cast como esse tua query é executada, então não é maneiro tu fazer dessa forma pq tu perde os benefícios do ORM do Django ser lazy evaluation. Faça da forma que o Herson falou ;)

[]'s

-- 
Flávia Missi
Reply all
Reply to author
Forward
0 new messages