Jak przekazać złożoną strukturę JSON przez wywołanie AJAX z JS i po stronie serwera, odczytać ją jako "bardzo podobną" strukturę danych w pythonie?Django: Czytanie tablicy obiektów JSON z QueryDict
Rozumiem, że formatowanie json może być używane (simplejson itp.), Ale jakoś czuję, że sam QueryDict jest zniekształcony lub sformatowany w moim przypadku?
przykład:
Po przejściu przez szereg obiektów JSON [{ "id" 1}, { "id": 2}, { "id": 3}] poprzez AJAX widoku Django The QueryDict zostanie sformatowany jako:
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']}>
Jak mogę nawet wykonać iterację w pliku json_data?
chcę dostać coś takiego zamiast:
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']>
Tak, że można uzyskać dostęp QueryDict jako słownika i odzyskać json_data postaci listy i przetwarza je w określonej kolejności: może po prostu iterację nich sekwencyjny Lista zamówień. Coś jak:
ret = request.POST
for item in ret['json_data']:
process(item['id'])
W rzeczywistości wartość, że idzie do procesu() może być inny słownik par wartości kluczowych zamiast tylko numer (1,2,3 itd)
Javascript:
var test = [{"id": 1},{"id": 2},{"id": 3}];
$.post(
"/insert_tc",
{
json_data: test,
"type": 'clone',
"csrfmiddlewaretoken": $csrf_token
},
function(json) {
//CALLBACK
},
"json"
);
views.py:
def insert_tc(request):
if request.method == 'POST':
ret = request.POST
type = ret['type']
list = ret.getlist(ret)
Ale lista zwraca puste []
Próbowałem zrzutów Simplejson, ładunków, przedmiotów, metod, ale żadna z nich nie pomogła.
Próbowałem nawet jQuery.param (obj, true), ale to nie jest to, czego chcę (chociaż trochę blisko).
Czy istnieje inny/lepszy sposób przekazywania złożonych struktur danych tam iz powrotem Django < -> JS za pośrednictwem AJAX?
coś jest zdecydowanie nie tak, ponieważ kod jak pisał pewno nie daje to rezultatu QueryDict. Czy możesz podać dokładny kod, który to wypisze? –
Obawiam się, że kod JS jest dokładny. Skopiowałem zarówno fragment kodu JS, jak i wynik żądania wydruku z pliku views.py z mniejszym formatowaniem. "test" to tablica obiektów, które mijam. – rajivRaja
Przepraszam, mój błąd. Zobacz moją odpowiedź poniżej. –