Django: Lendo Array de objetos JSON de QueryDict
Como faço para passar uma estrutura JSON composta via chamada AJAX de JS e no lado do servidor, leia-a como uma estrutura de dados "muito semelhante" em python?
Eu entendo que a formatação json pode ser usada (simplejson etc), mas de alguma forma eu sinto que o QueryDict em si é malformado ou reformatado no meu caso?
Exemplo:
Ao passar uma matriz de objetos JSON [{"id": 1}, {"id": 2}, {"id": 3}] via AJAX para visualização do Django, o QueryDict é formatado como:
<code>POST:<QueryDict: {u'json_data[0][id]': [u'1'], u'type': [u'clone'], u'csrfmiddlewaretoken': [u'69bb3c434ced31ab301ede04bf491ec0'], u'json_data[1][id]': [u'2'], u'json_data[2][id]': [u'3']}> </code>
Como faço para iterar pelo json_data?
Eu quero algo assim em vez disso:
<code>POST:<QueryDict: {u'json_data': [{u'id': [u'1']}, {u'id': [u'2']}, {u'id': [u'3']}]}, u'csrfmiddlewaretoken': [u'69bb3c434ced31ab301ede04bf491ec0'], u'type': [u'clone']> </code>
Para que eu possa acessar o QueryDict como um dicionário e recuperar o json_data como uma lista e processá-lo em uma determinada ordem: talvez apenas iterar por eles na ordem da lista sequencial. Algo como:
<code>ret = request.POST for item in ret['json_data']: process(item['id']) </code>
Na verdade, o valor que entra em process () pode ser outro dicionário de pares de valores chave em vez de apenas um número (1,2,3 etc)
Javascript:
<code>var test = [{"id": 1},{"id": 2},{"id": 3}]; $.post( "/insert_tc", { json_data: test, "type": 'clone', "csrfmiddlewaretoken": $csrf_token }, function(json) { //CALLBACK }, "json" ); </code>
views.py:
<code>def insert_tc(request): if request.method == 'POST': ret = request.POST type = ret['type'] list = ret.getlist(ret) </code>
Mas lista retorna vazio []
Eu tentei simplesjson dumps, cargas, itens, obter métodos, mas nenhum deles ajudou.
Eu até tentei jQuery.param (obj, true), mas não é isso que eu quero (embora um pouco perto).
Existe uma maneira diferente / melhor para passar estruturas de dados compostas para trás e para frente Django <-> JS via AJAX?