Eu tenho o seguinte código para serializar o queryset;
def render_to_response(self, context, **response_kwargs):
return HttpResponse(json.simplejson.dumps(list(self.get_queryset())),
mimetype="application/json")
E o seguinte é o meu get_querset()
[{'product': <Product: hederello ()>, u'_id': u'9802', u'_source': {u'code': u'23981', u'facilities': [{u'facility': {u'name': {u'fr': u'G\xe9n\xe9ral', u'en': u'General'}, u'value': {u'fr': [u'bar', u'r\xe9ception ouverte 24h/24', u'chambres non-fumeurs', u'chambres familiales',.........]}]
Que preciso serializar. Mas diz que não foi possível serializar o <Product: hederello ()>
. Porque lista composta de objetos e dictos django. Alguma ideia ?
Respostas:
simplejson
ejson
não funcionam bem com objetos django.Os serializadores embutidos do Django só podem serializar querysets preenchidos com objetos django:
No seu caso,
self.get_queryset()
contém uma mistura de objetos django e dicts dentro.Uma opção é livrar-se das instâncias de modelo no
self.get_queryset()
e substituí-las por dictos usandomodel_to_dict
:Espero que ajude.
fonte
'NoneType' object has no attribute 'concrete_model'
... E usando Django 1.4+safe
tage. stackoverflow.com/a/57939897/4157431A maneira mais fácil é usar um JsonResponse .
Para um queryset, você deve passar uma lista de
values
para esse queryset, assim:fonte
Descobri que isso pode ser feito de forma bastante simples usando o método ".values", que também fornece campos nomeados:
"list" deve ser usado para obter dados como iteráveis, uma vez que o tipo "value queryset" é apenas um dict se escolhido como iterável.
Documentação: https://docs.djangoproject.com/en/1.7/ref/models/querysets/#values
fonte
list()
ainda é aparentemente necessário.A partir da versão 1.9. Forma mais fácil e oficial de obter json
fonte
Nosso programador js me pediu para retornar os dados de formato JSON exatos em vez de uma string codificada em json para ela.
Abaixo está a solução. (Isso retornará um objeto que pode ser usado / visualizado diretamente no navegador)
fonte
HttpResponse(tmpObj)
Primeiro, adicionei um método to_dict ao meu modelo;
Então eu tenho isso;
e, finalmente, use esta classe para serializar meu queryset.
Isso funciona muito bem
fonte